1. ホーム
  2. c#

C#でソケットが接続/切断されているかどうかを確認するには?

2023-08-04 19:45:43

質問

ネットワーク ソケット (System.Net.Sockets.Socket) が切断されたときに相手ホストがパケットを送信しない場合 (例: 非グレースティックに切断されたため)、どのようにしてまだ接続しているかどうかを確認することができますか?

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

として ポール・ターナー 回答済み Socket.Connected はこのような状況では使用できません。接続がまだアクティブかどうかを確認するために、毎回接続をポーリングする必要があります。これは私が使用したコードです。

bool SocketConnected(Socket s)
{
    bool part1 = s.Poll(1000, SelectMode.SelectRead);
    bool part2 = (s.Available == 0);
    if (part1 && part2)
        return false;
    else
        return true;
}

このように動作します。

  • s.Poll が真を返した場合
    • 接続が閉じている、リセットされている、終了している、または保留中である (アクティブな接続がないことを意味する) 場合。
    • 接続が有効で、読み取り可能なデータがある状態
  • s.Available 読み出し可能なバイト数を返します。
  • がともに真の場合
    • 読み込めるデータがないため、接続はアクティブではありません。