>>183,186
Linux TCP/IPドライバの中の人を擁護してみると、
一般論としてselectを前提にしたAPI(ソケット/デバイス/ライブラリなど)の場合、
selectでREAD可能を返したのにread操作でデータ無しとなってしまう事態は、
どうしても避けることができないケースが存在しえることを理解してほしい。
今回のLinux TCP/IPドライバの場合、受信割り込みの延長でのチェックサム計算は
(システム全体の応答性能を劣化させるから)避けたかったのだろうと推測する。

だから最近のAPIでは(特にGUI向けAPIでは)、APIの内部でevent loop & selectを実行し
本当にデータが到着した場合にだけ(事前にアプリケーションが登録した)
call back関数を呼ぶという方式が増えているのだと思う。
この方式であれば今回のselectの問題だけでなく、このスレでたびたび話題となっている
受信メッセージの組み立て処理もAPI側で吸収できる(アプリケーションから隠蔽できる)
利点がある。