Ложное уведомление о готовности к вызову 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() тоже (ломая другие вещи).
Таким образом, эта ошибка не представляется актуальной в обозримом будущем.