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

 


Dernière réponse
Sujet : [C++] Questions sur les sockets (code inside)
antsite 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:

Votre réponse
Nom d'utilisateur    Pour poster, vous devez être inscrit sur ce forum .... si ce n'est pas le cas, cliquez ici !
Le ton de votre message                        
                       
Votre réponse


[b][i][u][strike][spoiler][fixed][cpp][url][email][img][*]   
 
   [quote]
 

Options

 
Vous avez perdu votre mot de passe ?


Vue Rapide de la discussion
antsite 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:
SoWhatIn22 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+
antsite 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

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