Bonjour,

Je voudrais vous faire part d'un problème que je rencontre avec des sockets tcp/ip.
J'utilise visual studio et il sagit d'une application mfc avec winsock.

Cette application communique avec un automate en tcp/ip avec un protocole trés simple :

L'application pc est un client qui se connecte sur le serveur de l'automate et elle est totalement maitre de la com ( l'automate n'initie jamais un échange ).

Le principe c'est de s'échanger des structures de mémoires en lecture ou en écriture avec toujours la même méthode : l'application fait la demande en envoyant un octet qui représente le numero de structure, un octet qui représente ce qu'on veut faire ( lire ou ecrire), un index auto incrémenté, un code d'erreur, et la strucure actuel.
Puis il attend immédiatement la reponse sous la même forme.

Pour des raisons pratique les échanges se font en mode bloqué sans thread car le besoin de maîtrise des données entre le pc est l'automate est important.

Et globalement ça marche trés bien. Mais, et c'est la raison de mon post, dans certains cas on est confronté à un probléme étrange. Occasionnelement l'application "freeze" plusieurs secondes.
Evidement il s'agit de la com en mode bloqué mais les raison de ce freeze ne sont pas clair et non aucune raison concrete.

Je m'attendait à avoir parfois un délai avec la réponse de l'automate mais en capturant ce problème dans wireshark on observe le phénomène suivant : Lors de l'envoie de la trame par le pc via send(m_socket, Message, longueur, 0) celui ci envoi une trame vide mais sans le bit de fin de message. Ensuite il ne passe rien (pendant plusieurs secondes), jusqu'à ce que l'automate envoie une trame de vie, alors l'envoi côté pc se débloque et la trame suivante envoyé par le pc contient bien les données et le bit de fin de message.

Ensuite tout se passe normalement avec la fonction recv() qui traite la réponse. Alors que je m'attendais que ce soit elle qui pose problème.

Je ne comprend pas du tout ce qu'il se passe et je n'ai pas beaucoup d'expérience à ce niveaux et absolument aucune piste sur la solution à ce problème.

Merci d'avance.