Voir le sujet précédent :: Voir le sujet suivant |
Auteur |
Message |
Magique dummy mioche

Inscrit le: 25 Avr 2004 Messages: 1
|
Posté le: Dim Avr 25, 2004 9:16 pm Sujet du message: socket & accept & windows |
|
|
Bonjour à tous !
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: | sock3 = accept(sock2, (struct sockaddr*)&tcp,&taille); |
J'ai essayé de changer la nature de la socket pour incorporer le time out
Code: | u_long val = 0;
ioctlsocket(sock3,FIONBIO,&val);
printf("[*] waiting for shell\n");
//sock3 = accept(sock2, (struct sockaddr*)&tcp,&taille);
timeout = 500;
endtime=(clock_t) (((double) timeout)/1000)*CLOCKS_PER_SEC + clock();
sock3=INVALID_SOCKET;
do
{
sock3 = accept(sock2, (struct sockaddr*)&mytcp,&len);
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 ?
merci de vos réponses |
|
Revenir en haut |
|
 |
PreferenceAsm dummy mioche

Inscrit le: 02 Fév 2005 Messages: 2
|
Posté le: Mer Fév 02, 2005 5:32 pm Sujet du message: |
|
|
Bonjour,
Tout d'abord merci pour la commande ioctlsocket pour me permettre de passer en non blocant étant dans le même cas que toi !
Je ne comprend pas trop par contre certaine chose dans ton code
Cette commande ne permet pas de passer en non blocant :
Code: | u_long val = 0;
ioctlsocket(sock3,FIONBIO,&val); |
Celle-ci le permet :
Code: | u_long val = 1;
ioctlsocket(sock2,FIONBIO,&val); |
car (val doit être <> de 0 et sock3 n'est pas ton socket mais le résultat de la commande accept)
Pour le reste, j'ai testé la commande certe en ASM32 mais j'ai repris la même syntaxe que toi et la fonction me renvoie bien INVALID_SOCKET et attend bien la fin de la tempo pour sortir. Je pencherais donc plus par des mauvais paramètres envoyé à ta fonction accept. |
|
Revenir en haut |
|
 |
|
|
Vous ne pouvez pas poster de nouveaux sujets dans ce forum Vous ne pouvez pas répondre aux sujets dans ce forum Vous ne pouvez pas éditer vos messages dans ce forum Vous ne pouvez pas supprimer vos messages dans ce forum Vous ne pouvez pas voter dans les sondages de ce forum
|
|