首頁 > 後端開發 > C++ > 連接到斷開連線的 IP 位址時如何減少套接字連線逾時?

連接到斷開連線的 IP 位址時如何減少套接字連線逾時?

Barbara Streisand
發布: 2025-01-10 11:17:41
原創
487 人瀏覽過

How to Reduce Socket Connect Timeout When Connecting to a Disconnected IP Address?

減少套接字連線逾時

問題:透過套接字連接到無法存取的 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>
登入後複製

改進的解決方案: BeginConnectEndConnect 方法提供了對超時行為的更多控制。 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中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板