Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1134 connectés 

  FORUM HardWare.fr
  Programmation
  C

  Socket : fixer un timeout

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Socket : fixer un timeout

n°955454
Ez4Me2KU
Posté le 18-01-2005 à 14:30:29  profilanswer
 

Bonjour à tous,
 
voilà j'essaie de faire un programme très simple en C avec des sockets (sous linux). Le but est de se connecter à une machine sur un certain port, de balancer du texte, et de recup le résultat (comme du telnet ou du web).
 
Le problème que j'ai actuellement, c'est que si le serveur ne répond pas, mon programme part en sucette, alors que je voudrais moi afficher une erreur dans ce cas, bref gérer un timeout.  
D'après la doc, il semblerait que je doive utiliser setsockopt, mais je ne trouve aucun exemple de comment utiliser cette fonction. Alors si vous pouviez m'aider merci par avance.


Message édité par Ez4Me2KU le 18-01-2005 à 14:31:04
mood
Publicité
Posté le 18-01-2005 à 14:30:29  profilanswer
 

n°955463
Ez4Me2KU
Posté le 18-01-2005 à 14:38:00  profilanswer
 

Avec le code c'est mieux :
 
J'utlise connect, read et write. Voilà ma connexion :
 

Code :
  1. if(connect( to_server_socket,
  2.                 (struct sockaddr *)&serverSockAddr,
  3.                 sizeof(serverSockAddr)) < 0 ) {
  4.                 printf("Erreur: connect impossible\n" );
  5.                 exit(0);
  6.         }

n°955588
3xc4l18ur
question = ( to ) ? be : ! be;
Posté le 18-01-2005 à 16:30:33  profilanswer
 

bah tu peux faire un select() il me semble
http://www.labri.fr/Perso/~billaud [...] eau-9.html


Message édité par !cricri le 18-01-2005 à 16:33:09
n°956032
docmaboul
Posté le 19-01-2005 à 06:37:15  profilanswer
 

s'il veut gérer le timeout sur la connection, c'est un poil plus compliqué. En pseudo-code, voilà ce qu'il faut faire:
 

Code :
  1. statut=ERREUR;
  2. s=socket();
  3. /* on passe en mode non-bloquant */
  4. old_flags=fcntl(s);
  5. if ( !(old_flags & O_NONBLOCK) )
  6.   fcntl(s, old_flags|O_NONBLOCK);
  7. /* on lance la connection */
  8. ret=connect(s);
  9. /* mince alors... */
  10. if ( ret < 0 )
  11. {
  12.   /* la connection est en cours */
  13.   if ( errno == EINPROGRESS )
  14.   {
  15.      /* gestion du timeout et de la gueule de la socket en sortie */
  16.      if ( select(s+1, timeout) > 0 )
  17.      {
  18.        getsockopt(s, SOL_SOCKET, SO_ERROR, &plouf);
  19.        if ( !plouf )
  20.          statut=CONNECTE;
  21.      }
  22.      else
  23.        statut=TIMEOUT;
  24.   }
  25. }
  26. else
  27.   statut=CONNECTE
  28. /* on repasse en mode bloquant */
  29. if ( !(old_flags & O_NONBLOCK) )
  30.   fcntl(s, old_flags);


 
Il reste juste à mettre les bons paramètres au bon endroit et à faire une gestion un peu plus fine des erreurs [:ddr555]


Message édité par docmaboul le 19-01-2005 à 06:40:15

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C

  Socket : fixer un timeout

 

Sujets relatifs
Socket: connaître l'adresse ip du client qui se connect à un serveur[JAVA] Plus haut niveau que les socket
Transfert d'images via un socket ?programmer un socket
audio streaming a travers un sockettransfert des donnees Audio sur socket
Socket : transférer des objetspb client avec socket tcp en caml
[socket] timeout 
Plus de sujets relatifs à : Socket : fixer un timeout


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR