LINUX.ORG.RU
Ответ на: комментарий от iBliss

Это сетевой сокет, что происходит на другой стороне знать не могу, но после того как read() возвращает ошибку, в поле revents можно увидеть 1

К сожалению не имею возможности сказать, что потом говорит poll() для этого сокета (их много), но интересует вообще почему такое возможно? На даный момент сделал такую обработку - закрытие сокета. Не знаю, насколько верно...

roy ★★★★★
() автор топика
Ответ на: комментарий от roy

1. Что возвращает read()?
2. Перед read()-ом errno обнуляется?
3. poll(), как впрочем и select() говорит, что сокет "готов к чтению" не
   только тогда, когда пришли данные, но и тогда, когда происходит 
   закрытие соединения "на том конце".

romanSA
()
Ответ на: комментарий от romanSA

read возвращает -1

зачем обнулять errno ? если read() вернул -1 значит там ошибка должна быть

я думал что в случае ошибки он вернет что-либо из POLLERR POLLHUP

roy ★★★★★
() автор топика
Ответ на: комментарий от roy

Большинство Unix'ов возвращают POLLIN в случае закрытия соединенния, некоторые возвращают POLLHUP.

Motl
()
Ответ на: комментарий от romanSA

3+1 Блок данных с того конца не дошел. Кажется у Стивенса был хороший примерчик работы с блокирующимися сокетами. К сож книжка далеко...

iBliss
()
Ответ на: комментарий от romanSA

Я думаю нет смысла. Программа нетривиальна, и рассматривать эти куски в отдельности нет смысла. Как показывает практика, действительно это происходит за-за системных или сетевых сбоев. Видать слишком большая нагрузка, ядро говорит что Out of socket memory иногда. Спасибо за советы и подсказки :)

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