Ложное уведомление о готовности к вызову Select System

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

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

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

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

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

1 ответ

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

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

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

Другие вопросы по тегам