62567


クライアントがデータを送信しているのをサーバー側のtcpのソケットで受信しているとき、何を持ってreadを止めるべきですか？

一定サイズ受信したら辞める、EOFが送られてきたら辞める、などを考えたのですが、もし悪意のあるクライアントが途中まで送ってなにもしないという行動をしたとき、イベントループでクライアントとのソケットをサーバーが監視するモデルだとすると、監視対象のソケットが増え続けていつかはリソースを食いつぶすのではないかと思ったのです。

どのようにしてこの問題を解決するべきでしょうか。

（SYNfloodのようなものではなく、また相手がクラッシュしているhalf-
openのようなものでもなく、確立されたコネクションに対してKeepAliveなどは返してくるが全く送信を完了させない相手を考えています）


CC BY-SA 4.0
2020-01-26T17:11:54.033
62566
2020-01-26T22:37:08.833
2020-01-26T18:00:47.080
37013
37013
question
network socket
tcpのsocketについて、どのようにすれば相手が送信を中断したとみなすことができますか？


>
> イベントループでクライアントとのソケットをサーバーが監視するモデルだとすると、監視対象のソケットが増え続けていつかはリソースを食いつぶすのではないかと思ったのです。

イベントループとは別に、タイムアウトを設けるべきです。最後の送受信から一定時間以内に次の受信イベントが発生しないクライアントは明示的に切断することです。


CC BY-SA 4.0
2020-01-26T22:37:08.833
62567
2020-01-26T22:37:08.833
4236
62566
answer