Maison > développement back-end > C++ > Comment réduire le délai d'expiration de la connexion Socket lors de la connexion à une adresse IP déconnectée ?

Comment réduire le délai d'expiration de la connexion Socket lors de la connexion à une adresse IP déconnectée ?

Barbara Streisand
Libérer: 2025-01-10 11:17:41
original
432 Les gens l'ont consulté

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

Réduction des délais d'attente de connexion aux sockets

Le problème : La connexion à une adresse IP inaccessible via un socket entraîne souvent des délais d'attente excessivement longs (par exemple, 15 secondes). Cet article montre comment raccourcir ce délai.

Code d'origine :

<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>
Copier après la connexion

Solution améliorée : Les méthodes BeginConnect et EndConnect offrent plus de contrôle sur le comportement du délai d'attente. BeginConnect permet de spécifier une durée de timeout.

<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>
Copier après la connexion

Ce code révisé tente une connexion avec un délai d'attente de 5 secondes. Si la connexion échoue dans ce délai, une exception est levée et le socket est explicitement fermé. Cela évite les fuites de ressources et améliore la réactivité.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal