read() после select(), John Lepikhin, 01-Сен-09, 13:12 [смотреть все]Кусочек вывода strace:select(1045, [16 1044], [1040], [], {0, 148319}) = 2 (in [16 1044], left {0, 148319}) read(16, 0xbf85241c, 4096) = -1 EAGAIN (Resource temporarily unavailable) select говорит, что на двух сокетах (16 и 1044) есть готовые данные для чтения. Сразу же после этого, из 16-го сокета пытаемся читать и получаем отказ, что данных нет. Как такое может быть?
|
- read() после select(), Vlad Lazarenko, 16:31 , 01-Сен-09 (1)
>Кусочек вывода strace: > >select(1045, [16 1044], [1040], [], {0, 148319}) = 2 (in [16 1044], >left {0, 148319}) >read(16, 0xbf85241c, 4096) > = -1 EAGAIN (Resource temporarily unavailable) > >select говорит, что на двух сокетах (16 и 1044) есть готовые данные >для чтения. Сразу же после этого, из 16-го сокета пытаемся читать >и получаем отказ, что данных нет. Как такое может быть? А Вы FD_ISSET проверьте, чтобы наверняка.
- read() после select(), svn, 12:46 , 02-Сен-09 (2)
>select говорит, что на двух сокетах (16 и 1044) есть готовые данные >для чтения.select говорит что операция чтения/записи не будет заблокирована! А вовсе не то что данные будут прочитаны или записаны. В твоём случае, похоже на конец файла/закрытия сокета. То есть, select тебе предлагает прочитать, чтобы узнать что это конец.
|