pb select et timeout

pb select et timeout - C - Programmation

Marsh Posté le 30-05-2005 à 15:36:01    

Bonjours,
 
voila jai un probleme avec le timeout de mon select, il est placer dans le serveur. Il marche correctement, le timeout marche parfaitement mais des qu'un client ce connect il boucle sans cesse et ne respect plus le timeout.
Si quelqun peut maider, ce serai cool merci.
tom.
 

Code :
  1. tv.tv_sec = 2;
  2. tv.tv_usec = 0;
  3. if (select(fd_max, &fd_read, &fd_write, NULL, &tv) == -1)
  4.     exit(1);


Message édité par tomi_tomo le 30-05-2005 à 15:50:17
Reply

Marsh Posté le 30-05-2005 à 15:36:01   

Reply

Marsh Posté le 31-05-2005 à 07:52:02    

tomi_tomo a écrit :

voila jai un probleme avec le timeout de mon select, il est placer dans le serveur. Il marche correctement, le timeout marche parfaitement mais des qu'un client ce connect il boucle sans cesse et ne respect plus le timeout.
Si quelqun peut maider, ce serai cool merci.
tom.

Code :
  1. tv.tv_sec = 2;
  2. tv.tv_usec = 0;
  3. if (select(fd_max, &fd_read, &fd_write, NULL, &tv) == -1)
  4.     exit(1);



Ca dépend un peu du système, mais il est préférable que le rechargement da la structure timer soit dans la boucle. C'est bien le cas ?


---------------
Des infos sur la programmation et le langage C: http://www.bien-programmer.fr Pas de Wi-Fi à la maison : http://www.cpl-france.org/
Reply

Marsh Posté le 31-05-2005 à 09:55:45    

Compren pas ca me fait la meme chose, des qu'un client ce connecte la timeout n'est plus pris en compte.
 

Code :
  1. tv.tv_sec = 2;
  2. tv.tv_usec = 0;
  3. while (1)
  4.     {
  5.       FD_ZERO(&fd_read);
  6.       FD_ZERO(&fd_write);
  7.        
  8.       /* FD_SET() des fd */ 
  9.        
  10.       if (select(fd_max, &fd_read, &fd_write, NULL, &tv) == -1)
  11.          exit(1);
  12.        /* FD_ISSET() des fd */
  13.        /* re init de la structure */
  14.        tv.tv_sec = 2;
  15.        tv.tv_usec = 0;
  16.     }


 
Je les completer un peut, c en gros mon code pour le select pour savoir si javais pas fait une erreur avance qui aurait
pu tuer mon timeout.
Merci pour laide.
tom.


Message édité par tomi_tomo le 31-05-2005 à 09:57:20
Reply

Marsh Posté le 31-05-2005 à 10:53:25    

tomi_tomo a écrit :

Compren pas ca me fait la meme chose, des qu'un client ce connecte la timeout n'est plus pris en compte.


Une façon compliquée d'écrire:


   while (1)
   {
      FD_ZERO(&fd_read);
      FD_ZERO(&fd_write);
         
      /* FD_SET() des fd */  
         
      tv.tv_sec = 2;
      tv.tv_usec = 0;
 
      if (select(fd_max, &fd_read, &fd_write, NULL, &tv) == -1)
         exit(1);
      /* FD_ISSET() des fd */
   }


Je ne vois pas de problème évident... Ca vient peut être d'ailleurs... Il faudrait poster une version minimale mais complète et compilable qui montre le problème...


---------------
Des infos sur la programmation et le langage C: http://www.bien-programmer.fr Pas de Wi-Fi à la maison : http://www.cpl-france.org/
Reply

Marsh Posté le 31-05-2005 à 11:12:45    

ok, merci, c cool de te pencher sur mon erreur, vais voir si je peut retrecir le code pour voir si je peut le poster.
Merci


Message édité par tomi_tomo le 31-05-2005 à 11:13:04
Reply

Marsh Posté le 01-06-2005 à 11:55:50    

Merci c bon jai trouver la reponse le bug avec le timout etait que je fesait pas un FD_ISSET sur le fd_write.
Voila, merci pour laide.


Message édité par tomi_tomo le 01-06-2005 à 11:56:43
Reply

Marsh Posté le 02-06-2005 à 12:12:06    

sur certains OS, select remplit le tv avec le temps restant, ou le temps écoulé je ne sais plus quand un "événement" socket fait retourner la fonction


---------------
-( BlackGoddess )-
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed