Уведомление о ложной готовности для системного вызова Select

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

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

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

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

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


person Aditya Sehgal    schedule 13.05.2009    source источник


Ответы (1)


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

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

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

person hynek    schedule 01.04.2011