C# のネットワーク通信ソケットのタイムアウト設定

ソケットに対して、タイムアウト設定を行う。

// 接続待ち
Socket client = tcplistener.AcceptSocket();

// 2秒データを受信しなかったらタイムアウトになるように設定
client.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.ReceiveTimeout, 2000);

このコードでタイムアウトした場合

System.IO.IOException: 転送接続からデータを読み取れません。 ---> 
System.Net.Sockets.SocketException: 接続済みの呼び出し先が一定の時間を過ぎても正しく応答しなかったため、接続できませんでした。
または接続済みのホストが応答しなかったため、確立された接続は失敗しました。

という内容の Exception が投げられる。

TcpClient でタイムアウト設定を行うなら

TcpClient client = new TcpClient("127.0.0.1", 12345);
client.ReceiveTimeout = 2000;
client.SendTimeout = 2000;

こんな感じで出来る。

送信タイムアウト(データを通信相手に一定時間送れなかった、受け取ってもらえなかった)
受信タイムアウト(通信相手から一定時間、データが届かなかった)
接続タイムアウト(通信相手に、ネットワーク的に接続できなかった、IPアドレス・ホスト名が間違っている、ポート番号が違う、相手のファイアウォールに阻まれた、など)

といった理由でタイムアウトが発生する事がある。

コメントを残す

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください