URL: https://www.opennet.me/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID9
Нить номер: 5122
[ Назад ]

Исходное сообщение
"Broken pipe при вызове mysql_query"

Отправлено drone , 07-Фев-06 13:41 
Собственно, сабж. Система FreeBSD.
В главном потоке создается коннект к БД.
Затем создаются дочерние. Все работает нормально.
Запросы к базе проходят успешно. Но в какой-то момент,
непонятно почему, при вызове mysql_query(&mysql, sql_str)
в дочернем потоке возникает broken pipe и программа вылетает.

Делал даже так:
        try{
            if (mysql_query(&mysql,    sql_str)) exit(3);
        }
        catch(MYSQL &mysql){
            puts("Error mysql_query!");
            exit(-1);
        }
        catch(char *sql_str){
            puts("Error sql_str!");
            exit(-1);
        }

исключение не ловится. Непонятно, прикаких обстоятельствах возникают
проблемы. Причем они возникают, когда в программе всего 1 дочерний
процесс. То есть никакой нагрузки нет. В чем может быть проблема?


Содержание

Сообщения в этом обсуждении
"Broken pipe при вызове mysql_query"
Отправлено Niam , 07-Фев-06 18:11 
>Собственно, сабж. Система FreeBSD.
>В главном потоке создается коннект к БД.
>Затем создаются дочерние. Все работает нормально.
>Запросы к базе проходят успешно. Но в какой-то момент,
>непонятно почему, при вызове mysql_query(&mysql, sql_str)
>в дочернем потоке возникает broken pipe и программа вылетает.
>
>Делал даже так:
>  try{
>   if (mysql_query(&mysql, sql_str)) exit(3);
>  }
>  catch(MYSQL &mysql){
>   puts("Error mysql_query!");
>   exit(-1);
>  }
>  catch(char *sql_str){
>   puts("Error sql_str!");
>   exit(-1);
>  }
>
>исключение не ловится. Непонятно, прикаких обстоятельствах возникают
>проблемы. Причем они возникают, когда в программе всего 1 дочерний
>процесс. То есть никакой нагрузки нет. В чем может быть проблема?

Исключения и не будут ловится ... мускул написан на с(не с++) и он не бросает исключений и почуме ты ловишь "char *sql_str", если в коде try нигде не делаешь throw "WTF?" ?


"Broken pipe при вызове mysql_query"
Отправлено Hordi , 07-Фев-06 18:52 
>>в дочернем потоке возникает broken pipe и программа вылетает.
SIG_PIPE может кидаться в нескольких случаях. Один из них, если не ошибаюсь, закрытие удаленной стороной сокета во время accept; еще если ты пишешь в сокет, а другая сторона закрыла соединение, т.е. это нормальная ситуация.

Повесь пустой обработчик на сигнал SIG_PIPE и не заморачивайся, все равно функции работы с сокетами тебе стандартную ошибку вернут.