Ложное уведомление о готовности к вызову Select System - PullRequest
8 голосов
/ 13 мая 2009

В http://linux.die.net/man/2/select, в разделе BUGS упоминается, что системный вызов select иногда может случайно сделать FD готовым, а последующий вызов read вернет 0. Текст описывает один такой пример (неправильная контрольная сумма), но я при условии, что были бы и другие причины (иначе они бы это исправили).

Любые идеи о том, что другие могут привести к тому, что Select вернул FD, готовый с энтузиазмом.

и относится ли это также и к другим ОС. В настоящее время я спрашиваю о Linux.

Соответствующий раздел для ссылки выше:

В Linux select () может сообщить о дескриптор файла сокета как "готов к чтение ", хотя тем не менее последующие блоки чтения. Это может для пример произойдет, когда данные поступили но при осмотре ошибся контрольная сумма и отбрасывается. Может быть другие обстоятельства, в которых файл дескриптор ложно сообщается как готовы. Таким образом, это может быть более безопасным для использования O_NONBLOCK на сокетах, которые не должны блок.

1 Ответ

1 голос
/ 01 апреля 2011

Это не совсем ответ, но, глядя на epoll, эти проблемы, похоже, для него решены.

И если я могу доверять этому сообщению в netdev, они хотя бы попытались исправить его в poll () и select () тоже (ломая другие вещи).

Таким образом, эта ошибка, похоже, не актуальна в обозримом будущем.

...