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

Réseau C Discussion :

Fonction accept() bloquante avec winsock2


Sujet :

Réseau C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre habitué
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2017
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2017
    Messages : 12
    Par défaut Fonction accept() bloquante avec winsock2
    Bonjour,

    J'ai suivis le cours de Bousk sur winsock, et celui-ci m'as beaucoup plu.
    Cependant, j'ai un soucis dans un programme et j'aurais aimé savoir si quelqu'un avait une solution à me proposer :

    dans mon application serveur, j'utilise un thread qui accepte les clients en continue pour ne pas bloquer l'application. Malheureusement lorsque je souhaite éteindre l'application et que du coup j'appelle thread.join() pour attendre la fin du thread, l'application reste bloqué car le thread ne se termine pas car il est bloqué sur la fonction accept() jusq'à ce qu'un client tente de se connecter au serveur.

    Quelqu'un connait-il une solution pour rendre la fonction accept() non bloquante, avec un timeout par exemple?

    Merci,

    Louis

  2. #2
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 393
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 393
    Par défaut
    Tu peux utiliser select(), et ne faire le accept() que si select() retourne l'info comme quoi il y a un client à accepter.
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  3. #3
    Rédacteur/Modérateur


    Homme Profil pro
    Network game programmer
    Inscrit en
    Juin 2010
    Messages
    7 147
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Canada

    Informations professionnelles :
    Activité : Network game programmer

    Informations forums :
    Inscription : Juin 2010
    Messages : 7 147
    Billets dans le blog
    4
    Par défaut
    Salut,

    la mise en place du mode non bloquant est identique chez le client et le serveur.
    Tu peux
    - utiliser select pour vérifier que le socket est prêt en lecture;
    - préférer poll toujours pour vérifier l'état de la lecture;
    - mettre en place le vrai mode non bloquant avec des sockets non bloquants.
    Si tu utilises un socket non bloquant, accept retournera directement INVALID_SOCKET s'il n'y a aucun client à accepter. http://bousk.developpez.com/cours/re...veur/#LIII-D-3
    Toutes ces techniques sont dans le même article Envoi et réception depuis le serveur.

    Sinon, tu peux aussi simplement fermer le socket avant d'appeler join. Ca devrait débloquer accept qui retournera alors INVALID_SOCKET.
    Pensez à consulter la FAQ ou les cours et tutoriels de la section C++.
    Un peu de programmation réseau ?
    Aucune aide via MP ne sera dispensée. Merci d'utiliser les forums prévus à cet effet.

  4. #4
    Membre habitué
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2017
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2017
    Messages : 12
    Par défaut
    Super, merci pour vos réponse!
    Je vais essayer tout de suite.

  5. #5
    Membre habitué
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2017
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2017
    Messages : 12
    Par défaut
    Ça fonctionne bien en fermant le socket, merci.

    Je me pencherait sur le select plus tard car il m'as l'air bien plus complexe, j'ai eu du mal à comprendre lors de m'a première lecture.

  6. #6
    Membre habitué
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2017
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2017
    Messages : 12
    Par défaut
    Par contre savez-vous pourquoi mon thread est non joignable?
    J'obtiens une exception quand j'appelle join() qui 'm’indique que le thread n'est pas joignable.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Problème avec les sockets et la fonction accept
    Par projeticq dans le forum Réseau
    Réponses: 6
    Dernier message: 13/04/2007, 11h37
  2. [swing][socket]méthode ServerSocket.accept() bloquante?
    Par the_ugly dans le forum EDT/SwingWorker
    Réponses: 6
    Dernier message: 07/11/2005, 11h15
  3. Réponses: 5
    Dernier message: 02/09/2005, 12h47
  4. Réponses: 5
    Dernier message: 12/01/2005, 20h58
  5. Gestion de sockets: fonction Accept
    Par keupon dans le forum MFC
    Réponses: 12
    Dernier message: 22/01/2004, 18h48

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