LINUX.ORG.RU

Треды и файловые дескрипторы.


0

0

Такая вот проблема. Есть сервер, который ждет соединения с помощью poll, а затем запускает отсоединенный поток, поток принимает соединение, обрабатывает. После вызова accept() сокет (в потоке) я переоткрываю fdopen(), и работаю стандартными библотечными функциями (fprintf, fscanf и т.д.). Но почему-то номер принимаемго сокета часто равен 0, это не ошибка, такое может быть, но все вываливается с ошибкой bad file descriptor. STDIN я не закрывал, программа не демон. И ноль этот появляется стабильно, ни один другой поток не мог ничего напортить. Несколько дней ломаю голову откуда там ноль взялся..
Если подскажете в чем дело - буду очень благодарен.


Спасибо.

★★★★

Re:

А если все это ради теста замутить без средов, будет работать?

LegaT
()

Re:

Это был совет локализовать проблему. В средах некоторые стандартные функции ведут себя не стандартно. Для этого для них выдуманы заменители (как правило с суффиксом _r), что означает: реентерабильная.

LegaT
()

А компилишь с -D_REENTRANT ?

nobody ★★
()

2LegaT Я выяснил что ошибка в том, что в тредах функциитипа fprintf некорректно работают, но аналогов с суффксом _r не нашел. В какой либе они должны быть?

2nobody. Нет. Сейчас попробую.

OxiD ★★★★
() автор топика

2OxiD:

Попробуй воспользоваться fwrite

chip
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.