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
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.