http://linux.die.net/man/2/selectのBUGS セクションでは、select システム コールが誤って FD をレディに設定し、その後の read コールで 0 が返されることがあると記載されています。 (間違ったチェックサム)しかし、他の理由もあると思います(そうでなければ、彼らはこれを修正したでしょう).
Select が誤って FD の準備ができていることを返す他の原因について考えてみてください。
これは他のOSにも当てはまりますか。現在Linuxについて質問しています。
上記のリンクに関連するセクション:
Linux では、select() がソケット ファイル記述子を「読み取り準備完了」と報告する場合がありますが、その後の読み取りはブロックされます。これは、たとえば、データが到着したが、検査時に間違ったチェックサムがあり、破棄された場合に発生する可能性があります。ファイル記述子が誤って準備完了と報告される状況が他にもある可能性があります。したがって、ブロックしてはならないソケットでは O_NONBLOCK を使用する方が安全かもしれません。