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:
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
Une fois sorti de cette fonction, le thread de comm va sortir de sa boucle car Connection1_OK = False et s'arrêter

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