ZedMaTrix
Messages postés178Date d'inscriptionvendredi 25 octobre 2002StatutMembreDernière intervention14 août 2008
-
1 juin 2006 à 16:36
caesarvanou
Messages postés14Date d'inscriptionvendredi 27 janvier 2006StatutMembreDernière intervention16 juin 2009
-
9 juin 2006 à 21:14
Salut a tous.
Bon j'ai pas mal cherché sur le site, et appart des débuts de réponses, je n'ai rien trouvé qui m'ai aidé à résoudre ce problème de TimeOut sur un connect() ou un Read().
Moi pour le read(), j'ai créé une boucle while pour essayer de faire une gestion du timeout, mais bon, c'est pas terrible.
Bref, malgret tout mes essaies ( y en pour quelques nuits tout de même ) j'arrive pas à trouver la manière de faire un timeout digne de ce nom.
Ma question : Aurriez vous des exemples de code qui gére un timeout avec des explications si possible ?
Je vous remercie par avance pour le temps que vous m'accorder
cs_AlexN
Messages postés694Date d'inscriptionlundi 5 décembre 2005StatutMembreDernière intervention 8 janvier 201419 2 juin 2006 à 08:55
Salut,
Une première solution semble être expliquée ici Cependant, il semble qu'il y ait des soucis avec linux... (man 7 socket)
* SO_RCVTIMEO et SO_SNDTIMEO : Indiquent le délai maximal d'émission ou de réception avant de renvoyer une erreur.
Sous Linux ces valeurs sont fixées dans les protocoles et ne peuvent être ni lues
ni modifiées. Leurs fonctionnalités peuvent être émulées à l'aide de alarm (2)
ou setitimer(2).<dt>
Tu peux émuler un timeout avec alarm(). C'est un peu barbare, mais cela fonctionnera si connect() est bloquant en mode interruptible. Ce que je n'ai pas vérifié.
Exemple :
//Tu mets en place un gestionnaire de signal pour capter SIGALRM :
MyAlarm (int sig) { return ; /* Juste pour provoquer la
sortie du mode bloquant */ }
ben92600
Messages postés56Date d'inscriptiondimanche 13 novembre 2005StatutMembreDernière intervention11 juillet 2006 2 juin 2006 à 09:36
je crois que tu te trompe un de mes binome a utiliser la fonction select sur l un de nos projet et nous arrivions bien a regle le time et pourtant nous etions sur netbsd ... donc je pense que c'est tout a fait possible aussi sur linux
caesarvanou
Messages postés14Date d'inscriptionvendredi 27 janvier 2006StatutMembreDernière intervention16 juin 2009 6 juin 2006 à 20:26
Déjà je te conseille ne pas utiliser de threads car les threads utilsent les mêmes ressource et donc le même connect.
C'est ce qu'on nous conseil à l'école.
Je vais voir ce que je peux faire pour trouver une solution a ton probléme.
caesarvanou
Messages postés14Date d'inscriptionvendredi 27 janvier 2006StatutMembreDernière intervention16 juin 2009 8 juin 2006 à 22:18
Ce que tu peux faire c'est
Crée un tableau de socket,
lance des threads pour effectuer les connections.
aprés chaque tentative te connection tu peux faire un usleep, histoire de ne pas bourinner sur le serveur au quel tu veux te connecté.
Tu peux ensuite passé par select pour monitorer tes socket, c'est même trés recommendé.
Petit truc : pense à verouiller les sockets tant qu'elles ne sont pas connecté. Pour cela utilise des mutex (je ne suis pas sûr de l'orthographe).
Normalement ça devrait donnée un truc de pas trop mal
JV