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

  FORUM HardWare.fr
  Programmation

  [C++] Questions sur les sockets (code inside)

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[C++] Questions sur les sockets (code inside)

n°95119
antsite
Je me souviens
Posté le 30-01-2002 à 21:12:46  profilanswer
 

voici un bout de code de mon serveur pour héberger un client et recevoir des données. Seulement je voudrais quitter la fonction quand le client se déconnecte, et pour cela j'utilise la fonction select() mais je n'arrive pas à savoir si le client est toujours la ou pas !
 
void host_client(void*)
{
 SOCKET a;
 FD_SET set;
 int r,rval;
 char datarcv[255];
 
 a = accept(s,NULL,NULL);
 if(a != INVALID_SOCKET)
 {
  FD_ZERO(&set);
  FD_SET(a,&set);
 
  do
  {
   rval = select(0,&set,0,0,0);
   if(rval == SOCKET_ERROR || !FD_ISSET(a,&set)) //marche pas !
    break; //ICI
   
   r = recv(a,datarcv,sizeof(datarcv),0);
   if(r != SOCKET_ERROR && r != 0)
    //traitement des données reçues
   Sleep(100);
  }
  while(1);
 
  //le client s'est déconnecté
  FD_ZERO(&set);
  closesocket(a);
 }
}
qu'est-ce qui ne va pas avec mon select() ? merci
 ANT

mood
Publicité
Posté le 30-01-2002 à 21:12:46  profilanswer
 

n°95190
SoWhatIn22
Posté le 31-01-2002 à 07:51:53  profilanswer
 

Qu'est-ce que tu entends par 'ne marche pas'? Qu'est-ce que tu t'attends à trouver? page de 'man select' sur google:
En sortie, les ensembles sont modifiés pour  indiquer  les descripteurs qui ont changé de statut.
 
Donc tu peux en déduire que si ton client se déctonnecte, alors la fonction va retourner 1, qui est le nombre de sockets pour lesquelles select a détécté un évènement.
Alors, tu va chercher de quelle socket il s'agit (avec en effet FD_ISSET). Une fois que tu connais la socket, alors tu fais un 'read' dessus. Si la fonction read te dis q'en fait il n'y a pas de data, alors c'est que la socket a été fermée par le client.
 
je ne veux pas te donner de code parce que je n'en ai pas sous la main et ce fait un moement que je n'ai pas manipulée un bout de code avec des sockets.
Mais j'espere que cela te mettra sur la piste.
 
a+

n°95283
antsite
Je me souviens
Posté le 31-01-2002 à 13:05:09  profilanswer
 

Je te remercie beaucoup, c'est très clair (j'avais pas tout compris au sujet de la fonction select()), mais j'ai juste une question : je suis sous windows et il n'y a pas à priori de fonction read(), donc que dois-je utiliser à la place ? recv() ?
merci pour tout
   ANT  :hello:


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

  [C++] Questions sur les sockets (code inside)

 

Sujets relatifs
Cherche code source d'un programme Histo en pascal...............[HTML] Code de caractère exotique (charmap.exe) vers Html
Un bon outil d'analyse de code java ?Quel est le code HTML pour faire un petit pop up non redimensionable ?
logiciel d'analyse de code C ...procedure d'impression de code barre sous dos???
[Access] Questions sur ses performances[c/c++] quelques questions pour avoir des points de depars:)
[Visual C++ 6] Pourquoi les sockets ne marchent pas[unix-awk] comment définir 1 caractère pas son code ascii sous unix ?
Plus de sujets relatifs à : [C++] Questions sur les sockets (code inside)


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