socket & accept & windows

 
Poster un nouveau sujet   Répondre au sujet    iprelax.fr Index du Forum -> C sous UNIX et Windows
Voir le sujet précédent :: Voir le sujet suivant  
Auteur Message
Magique
dummy mioche
dummy mioche


Inscrit le: 25 Avr 2004
Messages: 1

MessagePosté le: Dim Avr 25, 2004 9:16 pm    Sujet du message: socket & accept & windows Répondre en citant

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
Voir le profil de l'utilisateur Envoyer un message privé
PreferenceAsm
dummy mioche
dummy mioche


Inscrit le: 02 Fév 2005
Messages: 2

MessagePosté le: Mer Fév 02, 2005 5:32 pm    Sujet du message: Répondre en citant

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
Voir le profil de l'utilisateur Envoyer un message privé
Montrer les messages depuis:   
Poster un nouveau sujet   Répondre au sujet    iprelax.fr Index du Forum -> C sous UNIX et Windows Toutes les heures sont au format CET (Europe)
Page 1 sur 1

 
Sauter vers:  
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
Affilzen SARL : Mention légale