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