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 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73
| int recvPaquet(int sock, char *paquet, int longueurPaquet)
{
int nbRecu = 0, nbRecu2 = 1;
int retval;
fd_set readfds;
fd_set writefds;
fd_set exceptfds;
struct timeval timeout;
FD_ZERO(&readfds);
FD_ZERO(&writefds);
FD_ZERO(&exceptfds);
FD_SET(sock, &readfds);
FD_SET(sock, &writefds);
FD_SET(sock, &exceptfds);
timeout.tv_sec = TIMEOUT;
timeout.tv_sec = 10;
timeout.tv_usec = 0;
retval = select(sock+1, &readfds, &writefds, &exceptfds, &timeout);
if (retval == -1) {
printf("recvPaquet ERREUR 1\n");
return -1;
}
if (retval == 0) {
printf("recvPaquet ERREUR 2\n");
return -1;
}
else {
if (FD_ISSET(sock,&readfds)) {
nbRecu = recv(sock, paquet, longueurPaquet, 0);
// On gère le cas ou tous les caracteres voulu ne sont pas arrivées
nbRecu2= nbRecu;
while ((nbRecu > 0) && (nbRecu != longueurPaquet) && (nbRecu2 > 0)) {
paquet += nbRecu2;
nbRecu2 = recv(sock, paquet, longueurPaquet - nbRecu, 0);
if (nbRecu2 >= 0) {
nbRecu += nbRecu2;
}
else {
nbRecu = nbRecu2;
}
}
printf("recvPaquet lg=%d recv=%d\n",longueurPaquet,nbRecu2);
return nbRecu;
}
else {
printf("recvPaquet ERREUR 3 : retval=%d\n",retval);
return -1;
}
} |
Partager