Bonjour à tous !

après une recherche sur ce forum, j'ai trouvé quelques sujets qui touchent a mon probleme (http://www.developpez.net/forums/vie...=socket+accept) mais qui ne le traitent pas vraiment...

Je bosse avec un ami sur un client tcp/ip sous windows et je souhaite gérer le time out au serveur : lors de l'accept du serveur.
J'essaie de faire en sorte qu'au bout de X secondes, si le client ne s'est pas connecté, le serveur quitte.
Jusqu'à présent je travaillais avec des socketes bloquantes , donc on restait sur l'instruction
Code : Sélectionner tout - Visualiser dans une fenêtre à part
sock3 = accept(sock2, (struct sockaddr*)&mytcp,&len);
J'ai essayé de changer la nature de la socket pour incorporer le time out

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
u_long val = 0;
ioctlsocket(sock3,FIONBIO,&val); 
printf("[*] waiting for shell\n");
timeout = 500;
endtime=(clock_t) (((double) timeout)/1000)*CLOCKS_PER_SEC + clock(); 
sock3=INVALID_SOCKET
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
do 
{
  sock3 = accept(sock2, (struct sockaddr*)&tcp,&taille); 
  printf("..");
  fflush(stdout);
}
 while(sock3==INVALID_SOCKET && endtime>clock());
apres test, sock3 est bien différent de invalid, car on sort de la boucle (et que le temps n'est pas ecoulé, j'ai fais une verif). Mais le client ne s'est pas connecté !
donc pourquoi change t'il de valeur ? j'ai essayé de remplacer INVALID_SOCKET par SOCKET_ERROR , on sort quand meme de la boucle, immédiatement.
S'il faut que je rechange ma socket en bloquante, alors peut on gérer le time out en bloquant ?

(je sais qu'avec ma boucle et cette socket non bloquante je vais allégrement puiser dans les ressources machines )

merci de vos réponses