IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C++ Discussion :

Utilisation de select (multiplexage de socket)


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Étudiant
    Inscrit en
    Janvier 2006
    Messages
    52
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2006
    Messages : 52
    Par défaut Utilisation de select (multiplexage de socket)
    Bonjour,
    Je débute ne C++ et je dois déjà réaliser un jeu de cours en réseau.
    Je suis chargé de la parti réseau.
    Je dois donc codé un server pouvant gérer plusieur client; pour cela j'utilise la fonction select.
    Le probléme est que cette fonction me renvoi toujrou -1.
    Voici la pati de mon code utilisant le select
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
     
    int	Connection::boucle(void)
    {
      struct timeval	tv;
      SOCKET			cs;
      SOCKET			fd_max;
      t_client			*begin_cl;
      fd_set			readf;
      int				rt_select;
     
      tv.tv_sec = 1;
      tv.tv_usec = 0;
      begin_cl = NULL;
      while (1)
        {
          fd_max = ini_fd_set(&readf, begin_cl);
    	  //  , &readf
          rt_select = select  (s + (unsigned int) 1, NULL, NULL, NULL, NULL);
    		 if (rt_select < 0)
    		{
    			printf("errno %d\n", errno);
    			perror(PROJ_NAME);
    			printf("close\n");
    			fd_max = ini_fd_set(&readf, begin_cl);
    		}
          else if (FD_ISSET(s, &readf))
    	{
    	  cs = accept(s, (SOCKADDR *)&client_sin, &client_sin_len);
    	  printf("accept\n");
    	  begin_cl = Client_ser::ajoute_liste(cs, begin_cl);
    	}
          begin_cl = parse_fd_set(&readf, begin_cl);
        }
    }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
     
    SOCKET	Connection::ini_fd_set(fd_set *readf, t_client *cl)
    {
      SOCKET	fd_max;
      t_client	*crt;
     
      fd_max = 0;
      FD_ZERO(readf);
      FD_SET(1, readf);
      FD_SET(s, readf);
      if ( s > fd_max)
        fd_max = s;
      crt = cl;
      while (crt)
        {
          FD_SET(crt->fd, readf);
          if (crt->fd > fd_max)
     	fd_max = crt->fd;
          crt = crt->next;
        }
      return (fd_max);
    }
    A oui j'avait oublier un petit truc je développe sous Visual Studio.

  2. #2
    Expert confirmé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Décembre 2003
    Messages
    3 549
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Décembre 2003
    Messages : 3 549
    Par défaut
    Normal, tu as oublié de passer &readf à la fonction select...
    Sinon, si tu veux mon avis, tu ferais mieux d'utiliser boost.asio

  3. #3
    Membre averti
    Profil pro
    Étudiant
    Inscrit en
    Janvier 2006
    Messages
    52
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2006
    Messages : 52
    Par défaut
    J'ai avais effectivement oublier le &readf mias ca ne marche toujours pas select renvoi toujour -1.
    Sinon qu'esque le boots.asio ?

  4. #4
    Expert confirmé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Décembre 2003
    Messages
    3 549
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Décembre 2003
    Messages : 3 549

  5. #5
    Membre averti
    Profil pro
    Étudiant
    Inscrit en
    Janvier 2006
    Messages
    52
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2006
    Messages : 52
    Par défaut
    Ok, sais-tu comment on installe la lib sur Windows ?

  6. #6
    Expert confirmé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Décembre 2003
    Messages
    3 549
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Décembre 2003
    Messages : 3 549
    Par défaut
    Il suffit d'inclure les entêtes.

    Sinon ton select devrait bien fonctionner, tu dois te planter quelque part.
    Apparemment tu utilises s à la place de fd_max.

Discussions similaires

  1. Utilisation de Select() avec deux sockets ?
    Par sernos dans le forum Débuter
    Réponses: 6
    Dernier message: 04/09/2012, 12h53
  2. Utilisation de Select [Win/Linux]
    Par granquet dans le forum Réseau
    Réponses: 6
    Dernier message: 28/01/2010, 10h04
  3. Réponses: 6
    Dernier message: 26/02/2008, 11h58
  4. utilisation de select() pour faire un Tchat
    Par innosang dans le forum Réseau
    Réponses: 30
    Dernier message: 09/11/2005, 16h15
  5. [Hibernate] Utilisation de select new
    Par speedster dans le forum Hibernate
    Réponses: 2
    Dernier message: 10/09/2005, 16h41

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo