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

Boost C++ Discussion :

[ASIO] Détecter la perte d'une connexion


Sujet :

Boost C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Rédacteur

    Avatar de Matthieu Brucher
    Profil pro
    Développeur HPC
    Inscrit en
    Juillet 2005
    Messages
    9 810
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Développeur HPC
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2005
    Messages : 9 810
    Par défaut [ASIO] Détecter la perte d'une connexion
    Hello,

    J'envisage d'utiliser ASIO pour une application, ou plutôt une bibliothèque de communication assez basique. Le problème est que j'ai besoin de détecter si une connexion est perdue.
    En gros, j'ai un serveur et plusieurs clients. Le client se connecte et démarrage une connexion TCP. Si la connexion TCP est interrompue (client mort -> travail à faire pour reprendre un autre client, serveur mort -> attendre avant de se reconnecter en espérant voir un nouveau serveur).

    Ca se passe comment avec ASIO pour faire ça ? J'ai regardé les exemples et tutoriels sur le site de Boost, mais sans succès pour cette question spécifique

  2. #2
    Membre Expert

    Profil pro
    Inscrit en
    Juin 2006
    Messages
    1 294
    Détails du profil
    Informations personnelles :
    Localisation : Royaume-Uni

    Informations forums :
    Inscription : Juin 2006
    Messages : 1 294
    Par défaut
    Salut,

    En cas de déconnexion la callback de lecture et/ou écriture est déclenchée avec une erreur.

    En pratique je considère qu'il faut traiter toute erreur comme étant fatale pour la connexion.
    Il y a peut-être moyen de faire plus subtil en filtrant sur le type d'erreur mais ça me parait dangereux et pas forcément très utile...

    MAT.

  3. #3
    Rédacteur

    Avatar de Matthieu Brucher
    Profil pro
    Développeur HPC
    Inscrit en
    Juillet 2005
    Messages
    9 810
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Développeur HPC
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2005
    Messages : 9 810
    Par défaut
    Pas top, ça... Ca veut dire qu'il faut régulièrement tester si la connexion est encore vivante en envoyant des données...

  4. #4
    Membre Expert

    Profil pro
    Inscrit en
    Juin 2006
    Messages
    1 294
    Détails du profil
    Informations personnelles :
    Localisation : Royaume-Uni

    Informations forums :
    Inscription : Juin 2006
    Messages : 1 294
    Par défaut
    Non non c'est pas la peine, en mode connecté (TCP) ça le fait tout seul.

    MAT.

  5. #5
    Rédacteur

    Avatar de Matthieu Brucher
    Profil pro
    Développeur HPC
    Inscrit en
    Juillet 2005
    Messages
    9 810
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Développeur HPC
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2005
    Messages : 9 810
    Par défaut
    OK, je pense avoir compris. On verra bien si ça marche. Pour le moment, je marque résolu.

  6. #6
    Membre Expert
    Avatar de poukill
    Profil pro
    Inscrit en
    Février 2006
    Messages
    2 155
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 2 155
    Par défaut
    Je confirme. en mode connecté ça se fait "tout seul"... Enfin il faut tout de même regardé le code d'erreur.
    Voici un petit exemple faite vite fait, pour montrer où récupérer la perte de connexion:
    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
     
    void tcp_connection::wait_for_data()
    {
            boost::asio::async_read(socket,
               boost::asio::buffer(my_vector),
               boost::bind( &tcp_connection::handle_read, this,
               boost::asio::placeholders::error)
               );
    }
     
    void tcp_connection::handle_read(const boost::system::error_code& e)
    {
         if (!error)
         {
               // Ok, tout va bien
               // Quelques traitements puis on relance l'écoute
               wait_for_data();
         }
         else {
              // La connexion est morte
              socket.close();
         }
    }
    En cas de perte de connexion, tu vas automatiquement récupérer un code d'erreur, et tu pourras en faire ce que tu en veux.

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

Discussions similaires

  1. Perte de mes connexions Oracle après une période d'inactivité
    Par thierryler dans le forum Tomcat et TomEE
    Réponses: 5
    Dernier message: 17/12/2012, 14h33
  2. [Débutant] Détecter une connexion internet
    Par rolandl dans le forum WinRT
    Réponses: 0
    Dernier message: 04/11/2012, 22h49
  3. Détecter une connexion réseau
    Par whitebird001 dans le forum Développement
    Réponses: 2
    Dernier message: 01/03/2011, 10h09
  4. Comment détecter une connexion USB
    Par TekP@f dans le forum Windows
    Réponses: 3
    Dernier message: 23/01/2009, 14h54
  5. Comment détecter la perte de focus d'une fenêtre
    Par Leviathan_72 dans le forum Windows
    Réponses: 5
    Dernier message: 31/12/2005, 00h22

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