質問: クライアントがデータを送信しているのをサーバー側のtcpのソケットで受信しているとき、何を持ってreadを止めるべきですか? 一定サイズ受信したら辞める、EOFが送られてきたら辞める、などを考えたのですが、もし悪意のあるクライアントが途中まで送ってなにもしないという行動をしたとき、イベントループでクライアントとのソケットをサーバーが監視するモデルだとすると、監視対象のソケットが増え続けていつかはリソースを食いつぶすのではないかと思ったのです。 どのようにしてこの問題を解決するべきでしょうか。 (SYNfloodのようなものではなく、また相手がクラッシュしているhalf-openのようなものでもなく、確立されたコネクションに対してKeepAliveなどは返してくるが全く送信を完了させない相手を考えています)
回答: > > イベントループでクライアントとのソケットをサーバーが監視するモデルだとすると、監視対象のソケットが増え続けていつかはリソースを食いつぶすのではないかと思ったのです。 > > > イベントループとは別に、タイムアウトを設けるべきです。最後の送受信から一定時間以内に次の受信イベントが発生しないクライアントは明示的に切断することです。