.NET Framework でのソケット接続タイムアウトの管理
ネットワーク アプリケーションは多くの場合、リモート サーバーへの接続の待機時間を制御する必要があります。 デフォルトの .NET Framework ソケット接続タイムアウトは非常に長い (多くの場合 15 秒を超える) 場合があり、応答しないホストへの接続時に遅延が発生します。この記事では、効率を向上させるためにこのタイムアウトを調整する方法を説明します。
次のコード スニペットを考えてみましょう:
<code class="language-csharp">m_clientSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); // ... m_clientSocket.Connect(ipEnd);</code>
Connect
メソッドのデフォルトの動作は、最大 15 秒間ブロックします。より短いタイムアウトを実装するには、AsyncWaitHandle
クラスを利用できます。
<code class="language-csharp">Socket socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); // Set a 5-second connection timeout IAsyncResult result = socket.BeginConnect(sIP, iPort, null, null); bool success = result.AsyncWaitHandle.WaitOne(5000, true); // Wait for 5000 milliseconds (5 seconds) if (socket.Connected) { socket.EndConnect(result); } else { // Handle connection failure socket.Close(); throw new ApplicationException("Connection to server failed."); }</code>
この改訂されたコードは、非同期接続の試行を開始します。 WaitOne
メソッドは最大 5 秒間待機します。 この時間枠内で接続が成功すると、EndConnect
が完了します。 接続が失敗すると、ソケットが閉じられ、例外が発生するため、応答しないサーバーが長時間待機することがなくなります。このアプローチは、.NET Framework アプリケーションでソケット接続のタイムアウトを管理するための堅牢かつ効率的な方法を提供します。
以上が.NET Framework でソケット接続タイムアウトを構成するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。