1. ホーム
  2. c++

[解決済み] TCPクライアントの切断を検出する

2023-04-30 10:52:33

質問

例えば、簡単なサーバを運用しているとして、そのサーバに accept() を実行し、クライアントからの接続があったとします。

クライアントが切断されたことを知るための最良の方法は何でしょうか。通常、クライアントはクローズコマンドを送信することになっていますが、手動で切断したり、ネットワーク接続を完全に失ったりした場合はどうなるのでしょうか? サーバーはどのようにこれを検出し、処理することができるでしょうか。

どのように解決するのですか?

select (読み取りマスクを設定した場合) はハンドルを通知して戻りますが、 ioctl* を使って読み取りの保留バイト数を確認すると、0になります。これは、ソケットが切断されたことを示すサインです。

クライアントが切断されたことを確認するためのさまざまな方法に関する素晴らしい議論です。 Stephen Cleary, ハーフオープン(切断)コネクションの検出 .

* Windowsではioctlsocketを使用してください。