Heim > Backend-Entwicklung > C++ > Wie kann das Socket-Connect-Timeout reduziert werden, wenn eine Verbindung zu einer nicht verbundenen IP-Adresse hergestellt wird?

Wie kann das Socket-Connect-Timeout reduziert werden, wenn eine Verbindung zu einer nicht verbundenen IP-Adresse hergestellt wird?

Barbara Streisand
Freigeben: 2025-01-10 11:17:41
Original
432 Leute haben es durchsucht

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

Reduzierung von Zeitüberschreitungen bei Socket-Verbindungen

Das Problem: Das Herstellen einer Verbindung zu einer nicht erreichbaren IP-Adresse über einen Socket führt häufig zu übermäßig langen Zeitüberschreitungen (z. B. 15 Sekunden). Dieser Artikel zeigt, wie Sie diese Verzögerung verkürzen können.

Originalcode:

<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>
Nach dem Login kopieren

Verbesserte Lösung: Die Methoden BeginConnect und EndConnect bieten mehr Kontrolle über das Timeout-Verhalten. BeginConnect ermöglicht die Angabe einer Timeout-Dauer.

<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>
Nach dem Login kopieren

Dieser überarbeitete Code versucht eine Verbindung mit einem Zeitlimit von 5 Sekunden herzustellen. Wenn die Verbindung innerhalb dieses Zeitraums fehlschlägt, wird eine Ausnahme ausgelöst und der Socket wird explizit geschlossen. Dies verhindert Ressourcenlecks und verbessert die Reaktionsfähigkeit.

Das obige ist der detaillierte Inhalt vonWie kann das Socket-Connect-Timeout reduziert werden, wenn eine Verbindung zu einer nicht verbundenen IP-Adresse hergestellt wird?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage