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 :

Petit soucis de FD_SET et FD_CLR


Sujet :

C++

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    224
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 224
    Par défaut Petit soucis de FD_SET et FD_CLR
    Bonjour!
    Voilà, depuis un petit moment je m'efforce à créer un petit morceau de code portable pour gérer les envoies de données en TCP/IP par les sockets.

    J'utilise la fonction "select" qui est souvent (dans un while) appelée afin de vérifier les descripteurs de fichiers.

    Au niveau du client, lorsque je veux envoyer des données, je fais un FD_SET avec en argument la socket de communication et le descripteur de fichier "write", de manière à ce que le code suivant mon "select" soit exécuté. Ensuite, une fois que j'ai fini mon envoie de donnée je fais un FD_CLR sur la socket et le descripteur de fichier "write".

    Hors, cela ne fonctionne pas comme je le désirerai...
    Je m'explique :
    La première fois que j'utilise mon FD_SET pour écrire, tout se passe comme il faut, les données sont envoyées. Ensuite, quand l'envoie est terminé, on arrive au FD_CLR (que je juge nécessaire pour ne pas repasser dans le code suivant le select si il n'y a rien à faire!). Cependant, lorsque je redemande une écriture de donnée en "resollicitant" FD_SET, rien ne se passe (comme si le FD_CLR précédent avait "endormi" mon descripteur de fichier).

    Pour résumer : (Ce n'est pas le code linéaire tel qu'il est dans mon programme, juste des extraits!)
    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
    35
    36
     
    // Les déclarations
    fd_set m_rfds;
    fd_set m_wfds;
    fd_set m_efds;
    Socket m_socket;
     
    // Pour initialiser
    FD_ZERO(&m_rfds);
    FD_ZERO(&m_wfds);
    FD_ZERO(&m_efds);
     
    // Une fois notre socket créée et connectée au serveur
    FD_SET(static_cast<unsigned>(m_socket), &m_rfds);
    FD_SET(static_cast<unsigned>(m_socket), &m_wfds);
    FD_SET(static_cast<unsigned>(m_socket), &m_efds);
     
    // Extrait de la fonction "Update" périodiquement appelée
    fd_set rfds;
    fd_set wfds;
    fd_set efds;
     
    FD_COPY(&m_rfds, &rfds);
    FD_COPY(&m_wfds, &wfds);
    FD_COPY(&m_efds, &efds);
     
    int n = select((m_socket + 1), &rfds, &wfds, &efds, 0);
    //(... Ici, si n > 0 on fait ce qu'il y a à faire au niveau envoie, réception ...)
     
    // Ailleurs, dans une fonction d'envoi (où je n'envoie pas directement mais je 
    //stock mon packet à envoyer, je demande l'écriture, et le packet sera 
    //envoyé dans le code suivant le select
    FD_SET(static_cast<unsigned>(m_socket), m_wfds);
     
    // Lorsque l'envoie du packet est terminé
    FD_CLR(static_cast<unsigned>(m_socket), m_wfds);
    Auriez vous une idée pour résoudre mon problème?

    En espérant avoir été suffisamment clair!
    Merci beaucoup!

  2. #2
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    224
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 224
    Par défaut
    Bon et bien, finalement, ce problème n'est plus d'actualité étant donnée le nombre important de modification que j'ai apporté à mon code.
    Cependant, si vous avez de la documentation (et des exemples) ou de simples explications sur l'intérêt et l'utilisation du second descripteur de fichier passé en paramètre, je suis preneur! (celui qui concerne l'écriture)

    Merci!

Discussions similaires

  1. Petit soucis pour se connecter à l'adsl
    Par Blowih dans le forum Réseau
    Réponses: 4
    Dernier message: 28/07/2004, 00h16
  2. petit soucy de fenetre cmd
    Par FeetloveR666 dans le forum Windows
    Réponses: 5
    Dernier message: 03/07/2004, 14h24
  3. petit soucis lors d'un LOAD DATA INFILE
    Par Jovial dans le forum SQL Procédural
    Réponses: 9
    Dernier message: 04/06/2004, 11h58
  4. Réponses: 6
    Dernier message: 21/01/2004, 13h25
  5. [DEBUTANT] petits soucis avec un prgm de chat
    Par LechucK dans le forum MFC
    Réponses: 8
    Dernier message: 19/01/2004, 16h52

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