Bonjour tout le monde !
J'ai un petit probleme qui me pose bien des problemes...
Je developpe une application reseau, qui marche tres bien sauf par moment : mon client envoie bien toute les donnees (des messages compose d'une code (short) et d'une chaine)...
Dans ma fonction de reception (cote serveur), je fais alors :
Le probleme, c'est que parfois je passe dans le cas (nbread != sizeof(short)) i.e. nbread==1... ce qui me peine beaucoup, sachant q'un short fait 2 octets. (le client a cependant bien envoye toutes les donnees).
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10 ... if((nbread=read(desc, &(msg->code), sizeof(short))) == -1) reterr("cannot read the message's code", ESYS, -1) else if(nbread != sizeof(short)) { log_err(func, "cannot read the code at once (nbread=%d)", CEINTER, nbread); return -1; } ...
La fonction recv() n'est-elle pas supposee attendre que toutes les donnes sont presentes ? (sachant qu'elle est en mode bloquant, par defaut non ?).... ou alors c'est un autre probleme reseau qui intervient ?
Partager