Salut Tout le monde.
J'ai un client VB.NET qui communique avec une serveur écrit en C.
Côté client, je crée un thread qui va gérer la connexion, tout se passe bien, le serveur et le client communiquent.
Le problème arrive qd je ferme la connexion du client. J'ai une erreur côté serveur qui me dit client unexpectidly close connexion.
Comme vous le savez sûrement, la fermeture d'une connection tcp se fait en plusieurs étapes:
Or si je regarde avec wireshark, je vois que mon client ferme la socket avant que la connexion soit fermée proprement:
J'envoie le FIN, le serveur m'envoie son ACK, puis lorsque le serveur me renvoie son FIN, je renvoie un RST car la socket n'existe plus. d'où erreur.
voici comment je ferme ma socket:
Une fois sorti de cette fonction, le thread de comm va sortir de sa boucle car Connection1_OK = False et s'arrêter
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 Private mmClient As TcpClient Try If Not mmClient Is Nothing Then mmClient.GetStream.Close() mmClient.Close() mmClient = Nothing End If Catch ex As Exception ExceptionHandling.GlobalExceptionHandler(ex) Finally Connection1_OK = False mmClient = Nothing End Try
Ce que je suspecte, c'est que le thread s'arrête avant que la connexion soit complètement fermée (reçu et acquité le FIN du serveur)
Quelqun saurait-il comment tester que la connection est proprement fermée avant de sortir du thread?
merci par avance
Partager