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

  FORUM HardWare.fr
  Programmation
  C++

  interrompre un read ou un recv

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

interrompre un read ou un recv

n°176290
Gaspard
Posté le 15-07-2002 à 11:26:18  profilanswer
 

Bonjour,  
Un client doit envoyer une information à un serveur dans un buffer  
Dans le programme du client, il y a un send(buffer) ou un write(buffer)  
Dans le programme du serveur, il y a un recv(buffer) ou un read(buffer)  
Je voudrais faire en sorte que si au bout d'un certain temps, la socket du serveur ne reçoit toujours rien, on passe à
l'instruction suivante plutôt que de rester bloqué sur le recv ou le write  
 
Je ne sais pas comment faire

mood
Publicité
Posté le 15-07-2002 à 11:26:18  profilanswer
 

n°176304
LetoII
Le dormeur doit se réveiller
Posté le 15-07-2002 à 11:42:09  profilanswer
 

Tu bosse sous quel system?
 
Si c sous unix y a une fonction qui le fait (j'ai oublié son nom pour l'instant mais ça va me revenir)


---------------
Le Tyran
n°176309
Gaspard
Posté le 15-07-2002 à 11:50:20  profilanswer
 

Je bosses sous Linux
Je vais aller manger et j'espère que ton cerveau aura pu retrouver la fonction quand je reviendrais :D

n°176310
LetoII
Le dormeur doit se réveiller
Posté le 15-07-2002 à 11:52:06  profilanswer
 

Ca doit être select me semble son nom, ça te permet d'écouter simultanément plusieur entrée et de réagir dès qu'une est solicitée ou au bout d'un certain temps.


---------------
Le Tyran
n°176347
Phod
Glouloulou ?
Posté le 15-07-2002 à 13:29:16  profilanswer
 

regarde du coté de fcntl et ioctl ;)

n°176349
Phod
Glouloulou ?
Posté le 15-07-2002 à 13:30:39  profilanswer
 

Code :
  1. fcntl(sock,F_SETFL,O_NONBLOCK|fcntl(sock,F_GETFL)); //accept n'est plus bloquant
  2. fcntl(sock,F_SETFL,!(O_NDELAY)&fcntl(sock,F_GETFL)); // accept redevient blocant

n°176701
kenshiro18​2
Posté le 15-07-2002 à 22:35:28  profilanswer
 

letoII a écrit a écrit :

Ca doit être select me semble son nom, ça te permet d'écouter simultanément plusieur entrée et de réagir dès qu'une est solicitée ou au bout d'un certain temps.




 
Oui. Et quand "select" reagit, tu es sur qu'il y a des donnees a lire et que "recv" ne sera pas bloquant.
 
Quand a moi j'utilise (au risque de me repeter :) ) la lib ACE (enfin, quand je peux) qui encapsule "select" de belle facon objet.
 
http://www.cs.wustl.edu/~schmidt/ACE.html

n°177467
MrTonio
Posté le 16-07-2002 à 23:43:51  profilanswer
 

walla un exemple simple d utilisation de select :
 

Code :
  1. void read_socket(int sock)
  2. {
  3.   int sel;
  4.   fd_set r;
  5.   struct timeval timeout;
  6.   timeout.tv_sec = 2; // initialise le timeout, ici 2 sec
  7.   timeout.tv_usec = 0; // les milisecondes
  8.   while (42)
  9.   {
  10. // pour l'utilisation de select, il faut :
  11. //  - spécifier le plus de tous les filedescriptor à surveiller plus 1
  12. //  - créer un liste de file descriptor à surveiller
  13. //  - indiquer un timeout
  14.      FD_ZERO(&r); // initialise la liste de fd
  15.      FD_SET(sock, &r); // ajoute la socket dans la liste des fd
  16.      sel = select(sock + 1, &r, NULL, NULL, &timeout);
  17.      if (sel < 0) // select a rencontré une problème
  18.      {
  19.         perror("select" );
  20.         exit(1);
  21.      }
  22.      else if (sel == 0) // select est sorti a cause du timeout
  23.      {
  24.          // code si rien a lire sur socket
  25.      }
  26.      else // quelque chose à lire sur un file descriptor
  27.      {
  28.         if (FD_ISSET(sock, &r)) // si la socket est prete à être lue
  29.         {
  30.             // code de lecture : recv ou read
  31.         }
  32.      }
  33.   }
  34. }


 
 
pour plus d info sur select, il n y a qu une solution :  
 
MAN SELECT


---------------
WoIP - Video and Voice over IP -  http://www.woip.net/

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

  interrompre un read ou un recv

 

Sujets relatifs
l'instruction "read"[C] Equivalent de read sous Windows
[ C ] Est-ce que le read lit les caractères '\0' ?[SH]conservation des espaces avec READ
c koi "la memoire ne peut pas etre read"???un read non bloquant en c++ ?
[C++/Linux] - Read bloquant : que faire ?[ASP/IIS5] BD Access en read-only ???
[POO] Enquête : passage du mode "édition" au mode "read only" 
Plus de sujets relatifs à : interrompre un read ou un recv


Copyright © 1997-2025 Groupe LDLC (Signaler un contenu illicite / Données personnelles)