소켓 연결 시간 초과 줄이기
문제: 소켓을 통해 연결할 수 없는 IP 주소에 연결하면 시간 초과(예: 15초)가 지나치게 길어지는 경우가 많습니다. 이 문서에서는 이러한 지연을 줄이는 방법을 보여줍니다.
원본 코드:
<code class="language-csharp">try { m_clientSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); IPAddress ip = IPAddress.Parse(serverIp); int iPortNo = System.Convert.ToInt16(serverPort); IPEndPoint ipEnd = new IPEndPoint(ip, iPortNo); m_clientSocket.Connect(ipEnd); if (m_clientSocket.Connected) { lb_connectStatus.Text = "Connection Established"; WaitForServerData(); } } catch (SocketException se) { lb_connectStatus.Text = "Connection Failed"; MessageBox.Show(se.Message); }</code>
향상된 솔루션: BeginConnect
및 EndConnect
메서드를 사용하면 시간 초과 동작을 더 효과적으로 제어할 수 있습니다. BeginConnect
시간 초과 기간을 지정할 수 있습니다.
<code class="language-csharp">Socket socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); // Set connection timeout (5 seconds) IAsyncResult result = socket.BeginConnect(sIP, iPort, null, null); bool success = result.AsyncWaitHandle.WaitOne(5000, true); // 5000 milliseconds = 5 seconds if (socket.Connected) { socket.EndConnect(result); // ... proceed with connection ... } else { // Crucial: Close the socket to release resources socket.Close(); throw new ApplicationException("Failed to connect to server."); }</code>
이 수정된 코드는 5초 제한 시간으로 연결을 시도합니다. 해당 기간 내에 연결이 실패하면 예외가 발생하고 소켓이 명시적으로 닫힙니다. 이를 통해 리소스 누출을 방지하고 응답성을 향상시킵니다.
위 내용은 연결이 끊긴 IP 주소에 연결할 때 소켓 연결 시간 초과를 줄이는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!