Bonjour,
J'ai écrit une petite appli client/Serveur. (Serveur sous Linux/Windows, client sous Linux).
Cote Linux, tout semble aller, par contre j'ai un souci avec select() sous windows. Je ne tombe jamais sur un timeout. Voici mon code :
J'ai donc fait le test suivant : je me connecte à mon serveur, juste apres le connect() du client, je fais un sleep(10) et je debranche mon cable pour arriver à un timeout. Mon client detecte le timeout sans probleme, par contre le serveur, fait quand meme sa lecture meme s'il ne lis rien.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 fd_set set_recv; TIMEVAL recvOut; int retval; FD_ZERO(&set_recv); FD_SET(Socketd, &set_recv); // "Liage" au socket descriptor du accept() recvOut.tv_sec = 18; recvOut.tv_usec=0; while(1) { FD_ZERO(&set_recv); FD_SET(Socketd, &set_recv) ; retval = select(0, &set_recv, NULL,NULL,&recvOut); //1er param ignoré d'apres msdn if (retval > 0) { recv (); break;} if (retval == 0) { //on a un timeout } }
Apres controle : la valeur de retour de select est 1. Or je devrais avoir avoir 0 comme valeur de retour.
Avec le serveur Linux, pas de soucis, le timeout est bien detecte. (code serveur Linux/Windows à 98% pareil).
Merci d'avance
Partager