На http://linux.die.net/man/2/select в разделе ОШИБКИ В разделе упоминается, что системный вызов select может иногда ложно установить готовность FD, и последующий вызов чтения вернет 0. В тексте описывается один такой пример (неправильная контрольная сумма), но я предполагаю, что были бы и другие причины (в противном случае они были бы исправил это).
Любые идеи, что может привести к тому, что Select может ложно вернуть готовый FD.
и относится ли это также к другим ОС. Я сейчас спрашиваю о Linux.
Соответствующий раздел по ссылке выше:
В Linux select () может сообщать о дескрипторе файла сокета как о «готовом к чтению», тем не менее, при последующих блоках чтения. Это могло произойти, например, когда данные были получены, но при проверке имеют неправильную контрольную сумму и отбрасываются. Могут быть и другие обстоятельства, при которых дескриптор файла ложно сообщается как готовый. Таким образом, может быть безопаснее использовать O_NONBLOCK для сокетов, которые не должны блокироваться.