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

  FORUM HardWare.fr
  Programmation
  C++

  [Resolu] timeout sur un recv(...) ca existe?

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[Resolu] timeout sur un recv(...) ca existe?

n°344971
polo021
Posté le 27-03-2003 à 11:13:03  profilanswer
 

Dans les sockets, il arrive parfois que le receive attende indefiniment, n'y aurait il pas moyen d'avoir un time out pour arreter le receive apres un certain temps?


Message édité par polo021 le 27-03-2003 à 12:28:14
mood
Publicité
Posté le 27-03-2003 à 11:13:03  profilanswer
 

n°345080
western
AJMM
Posté le 27-03-2003 à 11:42:31  profilanswer
 

ALARM(2)                  Manuel du programmeur Linux                 ALARM(2)
 
NOM
       alarm - Programmer un réveil (timer) pour l'émission d'un signal.
 
SYNOPSIS
       #include <unistd.h>
 
       unsigned int alarm(unsigned int nb_sec);
 
DESCRIPTION
       alarm programme une temporisation pour qu'elle envoie un signal SIGALRM
       au processus en cours dans nb_sec secondes.  Si  le  signal  n'est  pas
       masqué ou intercepté, sa réception terminera le processus.
 
       Les  programmations  successives d'alarmes ne sont pas empilées, chaque
       appel de alarm annule l'éventuelle programmation précédente.
 
       Si nb_sec vaut zéro, aucune alarme n'est planifiée.
 
VALEUR RENVOYÉE
       alarm renvoie le nombre de secondes qu'il restait de  la  programmation
       précédente  (annulée),  ou  zéro si aucune alarme n'avait été planifiée
       auparavant.
 
NOTES
       Les fonctions alarm et setitimer partagent la même temporisation, aussi
       l'appel de l'une interfère avec l'utilisation de l'autre.
 
       sleep()  peut être implémenté en utilisant SIGALRM, aussi il est décon-
       seillé de mélanger les appels alarm() et sleep().
 
       Les délais dûs au  multitâche  peuvent,  comme  toujours,  retarder  le
       déclenchement d'une alarme d'une durée arbitraire.
 
CONFORMITÉ
       SVr4, SVID, POSIX, X/OPEN, BSD 4.3
 
VOIR AUSSI
       setitimer(2),   signal(2),  sigaction(2),  gettimeofday(2),  select(2),
       pause(2), sleep(3)
 
TRADUCTION
       Christophe Blaess, 1997.
 
Linux                            30 Août 2000                         ALARM(2)

n°345093
polo021
Posté le 27-03-2003 à 11:47:53  profilanswer
 

Suis sous windows CE, merci quand meme.
 
Avec les timers y aurait pas moyen d'imaginer un truc?

n°345110
western
AJMM
Posté le 27-03-2003 à 11:58:47  profilanswer
 

polo021 a écrit :

Suis sous windows CE


alarm est POSIX! j'ai crû lire quelque part que les wins respectent la norme ...

n°345115
Konar
Posté le 27-03-2003 à 11:59:31  profilanswer
 

polo021 a écrit :

Suis sous windows CE, merci quand meme.
 
Avec les timers y aurait pas moyen d'imaginer un truc?


 
avec un timer, a part un beau TerminateThread("ton thread ki fait des recv" ), je vois pas...
 
mais je penses plutot ke tu cherches a faire une sorte de recv() ki prenne un parametre temps t et qui quiterait apres t, mais la je vois encore moins... tu peux essayer de chercher du coté des sockets bloquantes ou non (j'ai l'impression ke ce genre de topic a deja été abordé...).

n°345144
Konar
Posté le 27-03-2003 à 12:16:39  profilanswer
 

polo021 a écrit :

Dans les sockets, il arrive parfois que le receive attende indefiniment, n'y aurait il pas moyen d'avoir un time out pour arreter le receive apres un certain temps?


 
la solution est toute bete en fait : au lieu de faire des recv, tu fais un select, ki va te dire si qqchose est dans le nivo d'etre reçu. alors seulement dans ce cas tu fais un recv.
(le select prends comme parametre un timeout )
 
en fait il ne faut jamais faire de recv() sans que le select() ne t'ai dit qu'il y avait des données pretes a etre recues.
 
un bout de code vite fait ki peut correspondre :
 

Code :
  1. fd_set input_set, exc_set; // Create Input set
  2. int s;
  3. timeval timeout;
  4. timeout.tv_sec = 2; // Attends 2 sec pour returner.
  5. timeout.tv_usec = 0;
  6. while (1)
  7. {
  8. //Set up the input,and exception sets for select().
  9. FD_ZERO(&input_set);
  10. FD_SET(m_Socket, &input_set);
  11. s = select(0 /* vive le c-unix */, &input_set, NULL, NULL, &timeout);
  12. if (s > 0) // Is there data coming in?
  13. {
  14.  // tu fais un recv.
  15. }
  16. if (s == SOCKET_ERROR)
  17. {
  18.  OutputDebugString("SOCKET_ERROR" );
  19.  break;
  20. }
  21. if (s == 0)
  22.  OutputDebugString("no Data coming in" );
  23. }


 
voila, c juste un exemple tout bete.
En plus tu peux specifier plusieurs sockets dans le select, et savoir dans quelle socket faire le recv() grace a la macro FD_ISSET(Socket1, &input_set)).
 
regarde du coté des man : (en plus c pour Win CE)
http://msdn.microsoft.com/library/ [...] select.asp


Message édité par Konar le 27-03-2003 à 12:24:50
n°345172
polo021
Posté le 27-03-2003 à 12:27:40  profilanswer
 

c'etait bien ca que je cherchais.
 
 :jap: beaucoup


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

  [Resolu] timeout sur un recv(...) ca existe?

 

Sujets relatifs
Resolu[c/Linux]Comment recupérer les infos d'un pipe sans perte de doncomment baisser le timeout d'une exception??
[resolu]selectionner automatiquement toutes les option d'1 select[Résolu] Un GetWindowText qui plante...
OnMouseOver -> afficher une autre image ? [RESOLU]Disabled des boutons qui font parti d'un tableau [résolu]
[mysql] Joindre des tables [résolu]Comment vérifier qu'une variable existe ??
[Java] Client FTP [Résolu][Resolu] [C++] template et Visual Studio 6.0
Plus de sujets relatifs à : [Resolu] timeout sur un recv(...) ca existe?


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