1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49
| int recvPaquet(int sock, char *paquet, int longueur)
{
int nbRecu = 0, nbRecu2 = 1;
int retval;
fd_set readfds;
struct timeval timeout;
FD_ZERO(&readfds);
FD_SET(sock, &readfds);
timeout.tv_sec = TIMEOUT;
timeout.tv_sec = 1;
timeout.tv_usec = 0;
retval = select(1, &readfds, NULL, NULL, &timeout);
if (retval) {
nbRecu = recv(sock, paquet, longueur, 0);
// On gère le cas ou tous les caracteres voulu ne sont pas arrivées
nbRecu2= nbRecu;
while ((nbRecu > 0) && (nbRecu != longueur) && (nbRecu2 > 0)) {
paquet += nbRecu2;
nbRecu2 = recv(sock, paquet, longueur - nbRecu, 0);
if (nbRecu2 >= 0) {
nbRecu += nbRecu2;
}
else {
nbRecu = nbRecu2;
}
}
return nbRecu;
}
else {
printf("recvPaquet %d\n",retval);
return -1;
}
} |
Partager