2009-05-13 8 views
7

http://linux.die.net/man/2/selectのBUGSセクションでは、selectシステムコールによってFDがレディ状態になり、後続のreadコールが0を返すことがあることが記載されています。私は他の理由もあると仮定しています(そうでなければ、これを修正したでしょう)。Select Systemコールの擬似準備通知

SelectがFDを偽りに返す原因は何でしょうか。

これは他のOSにも当てはまります。私は現在、Linuxについて尋ねています。上記リンクの

関連セクション:Linuxでは

は、選択()、しばらくそれにもかかわらず 後続の読取りブロック「を 読書のための準備」として ソケットファイルディスクリプタを報告することがあります。これは、 に到着したときに、 の例が発生する可能性がありますが、検査時には チェックサムが間違っていて破棄されます。 記述子が として疑似的に報告されるその他の状況である可能性があります。 したがって、 O_NONBLOCKを使用して、 ブロックではないはずのソケットには安全かもしれません。

答えて

1

これはまさに答えではありませんが、epollを見ると、これらの問題は解決されているようです。

netdevでthis messageを信用できれば、少なくともpoll()とselect()でそれを修正しようとしました(他のものを壊す)。

このように、このバグは近い将来には関係していないようです。