Socket connect timeout

VbNicoG - 23 avril 2015 à 17:15
 VbNicoG - 23 avril 2015 à 18:26
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

A voir également:

2 réponses

Zermelo Messages postés 378 Date d'inscription samedi 22 septembre 2012 Statut Membre Dernière intervention 13 août 2017 14
23 avril 2015 à 18:06
0
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
0
Rejoignez-nous