Su http://linux.die.net/man/2/select, nella sezione BUGS si dice che la chiamata di sistema selezionata può talvolta impostare spuratamente FD pronto e la successiva chiamata di lettura restituirà 0. Il testo descrive uno di questi esempi (checksum errato) ma suppongo che ci sarebbero anche altri motivi (altrimenti l'avrebbero risolto).Notifica spuria prontezza per Seleziona chiamata di sistema
Qualsiasi idea che cosa potrebbe causare l'altra causa Seleziona per restituire un FD pronto spurio.
e questo vale anche per altri sistemi operativi. Attualmente sto chiedendo di Linux.
sezione pertinente per il collegamento di cui sopra:
Sotto Linux, select() può segnalare un file di descrizione presa come "pronto per lettura", mentre comunque un successivi blocchi di lettura. Questo potrebbe accadere per l'esempio quando i dati sono arrivati ma dopo l'esame ha il checksum errato ed è scartato. È possibile che siano altre circostanze in cui un descrittore del file viene segnalato in modo errato come pronto. Quindi potrebbe essere più sicuro usare O_NONBLOCK sui socket che non dovrebbero essere il blocco .