私は少しのプログラムを作っています。クライアントの切断を処理しようとしています。クライアントが切断すると、彼はシャットダウンメッセージを送信し、それを処理します。しかし、クライアントが強制的に閉じられると(ネットワーク接続が失われ、タスクが強制終了され、例外が発生します)、サーバーは引き続きクライアントを接続していると見なします。 今、私はこの情報を直ちに更新しようとしています。クライアントがもはや接続されていなければ、彼は削除する必要があります。私は毎回彼にpingすることはできませんし、できますか?送信中で、私のpingコマンドに干渉している場合はどうなりますか?C#ソケット - クライアントが切断するかどうかを確認する方法
TL;私のクライアントがもう接続されていないかどうかを知りませんか?
TCPは、多くのタイプの切断を検出しないようにするために設計されています。グレースフルクロージャ以外に、リモートエンドポイントがソケットを強制的に閉じた場合にのみ、エラーが発生します。また、ソケットに読み込み保留中の場合でもエラーが発生します。それ以外の場合は、ソケットに書き込まない限りエラーは検出されません。 TCPには定期的にソケットに書き込む "keep-alive"オプションが含まれているので、これを自動的に実行することができます。切断を検出しようとすると、TCPのフォールトトレランスの全ポイントが無効になるため、一般的には**悪い考え**です。 –
質問の詳細な説明については、重複したマークを参照してください。 –