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 :

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;
	}
...
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).

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 ?