久しぶりにネットワークプログラミングネタで。 TCP/IPをソケットインターフェースで使う際に、通信相手側が切断したかどうかはrecv()で受信したときにゼロが戻ることで判断するのは誰もが知っていることですが、send()で送信する際にも、1回目にはエラーにならなくても2回目には大抵エラーになることでわかるということも知っていると思います。 たとえば、HTTPサーバを作るとすると、送受信部分は下記のような感じに書くでしょう。 ループ{ recv()でリクエストを受信 if(recv()のリターン値がゼロか-1){ break; } send()で応答を送信:応答を送りきるまで } 大抵はこれで問題ないのですが、高負荷時にはこれだとカーネルが不機嫌になることがわかりました。。 send()で大きなサイズを送信する場合、クライアント側が途中で切断してしまうことがあり、基本的にはsend()が-