Socket connect timeout

Signaler
-
 VbNicoG -
Bonjour,

J'utilise un socket pour me connecter à un serveur distant.
Il se peut pour plusieurs raisons que le serveur ne réponde pas (câble déconnecté, serveur hors tension...).
Mon problème est que la méthode "connect" met pas loin de 30 secondes pour renvoyer une erreur de connexion lorsqu'elle se produit.
Ma question : Est il possible de configurer un timeout sur la connexion ? ou tout autre moyen de sortir de la méthode rapidement ?
Pour info, j'utilise les méthodes "ReceiveTimeout" et "SendTimeout" mais elles n'agissent pas sur la connexion seulement sur l'envoi et réception de données.

Merci!

Voici mon code :

Dim IsConnected as boolean

Public Sub Connect(ByVal PCD_IP_Address As String)

    Dim PCDSocketClient As Socket
    Dim PCDEndPoint As IPEndPoint

        Try
    PCDSocketClient = New Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp)

            PCDSocketClient.SendTimeout = 500
            PCDSocketClient.ReceiveTimeout = 500

            PCDEndPoint = New IPEndPoint(IPAddress.Parse(PCD_IP_Address), port)
            PCDSocketClient.Connect(PCDEndPoint)
            IsConnected = PCDSocketClient.Connected

        Catch ex As Exception
            IsConnected = False
        End Try

end sub

2 réponses

Messages postés
378
Date d'inscription
samedi 22 septembre 2012
Statut
Membre
Dernière intervention
13 août 2017
14
Bonsoir,

Merci de votre réponse.

Finalement j'ai trouvé une solution qui me convient :

Dim IsConnected as boolean

Public Sub Connect(ByVal PCD_IP_Address As String)

    Dim PCDSocketClient As Socket
    Dim PCDEndPoint As IPEndPoint

        Try
    PCDSocketClient = New Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp)
            Dim result As IAsyncResult = PCDSocketClient.BeginConnect(IPAddress.Parse(PCD_IP_Address), port, Nothing, Nothing)
            Dim success As Boolean = result.AsyncWaitHandle.WaitOne(2000, True)

            If Not success Then
                PCDSocketClient.Close()
                Throw New ApplicationException("Failed to connect server.")
            End If

            IsConnected = PCDSocketClient.Connected

        Catch ex As Exception
            IsConnected = False
        End Try