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'instructionJ'ai essayé de changer la nature de la socket pour incorporer le time out
Code : Sélectionner tout - Visualiser dans une fenêtre à part sock3 = accept(sock2, (struct sockaddr*)&mytcp,&len);
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_SOCKETapres 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é !
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());
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
Partager