2009-05-13 18 views
7

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 .

risposta

1

Questa non è esattamente una risposta, ma guardando oltre epoll, questi problemi sembrano essere risolti per questo.

E se posso fidarmi di this message in netdev, hanno almeno provato a risolverlo in poll() e select() anche (rompendo altre cose).

Pertanto, questo errore non sembra rilevante nel prossimo futuro.

Problemi correlati