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
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