Forum Clubic

[réseau TCP] recv bloque la première fois .... - ... mais ne bloque plus par la suite

bonjour,

voila, lorsque je fais un recv à partir de mon serveur, la fonction est bien bloquante , elle attend qu’un client fasse un send. Une fois mon send envoyé et récupéré par recv, j’affiche le contenu du message. Pour l’instant c’est OK.
Ensuite je refais un recv a la suite du premier et là, elle n’est plus bloquante, en plus il semble que ce deuxième recv ne récupère rien du tout puisque que ma variable buffer reste inchangé.

Ma question est donc ?

  • Est ce normal que le second appel a recv ne soit pas bloquant ?

Je peux détailler plus si vous voulez, ou mettre du pseudo code.
merci de votre aide

Une idée toute au hasard… ne faudrait-il pas revider ce buffer entre temps :??:

je n’en vois pas l’interet car, si il y a de nouvelles données NORMALEMENT elles devraient recouvrir celles du nouveau buffer.

Celui la dit, j’ai quand meme testé ta proposition, j ai fait un “memset(buf,0,10)” , mais le deuxième recv n’est toujours pas bloquant, mais quand j’affiche mon buffer, il est bien vide.

C’est vraiment bizarre cette histoire !!!

ayé j ai trouvé :MDR

bon alors, le probleme venait du recv.
lorsqu’on fait un send ( coté client par exemple ), la recv (coté serveur) attend bien la réponse. Mais des que l’on ferme la socket (tjs coté client), et que l’on refait appel a recv, cette dernière ne génèrre pas d’erreur mais ne retourne rien non plus; le message recu à une longueur égale a zéro.

cela dit dans la doc, ils disent que lorsque la socket "se casse", un signal est envoyé ( BROKEN PIPE ).
Mais moi, Je ne recoit ce signal que du coté du send ??? :??:

Si qqun peut éclaircir ma lanterne ?
NB: dans mes fonctions send et recv n’ont aucun flag MSG_NOSIGNAL de positionné

merci

Salut,

J’ai le même problème que toi : chaine de caractere nulle avec recv…

As tu trouvé une solution ?

à plus