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 :

Eviter les Broken pipe.


Sujet :

Réseau C

  1. #1
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2012
    Messages
    118
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2012
    Messages : 118
    Points : 40
    Points
    40
    Par défaut Eviter les Broken pipe.
    Bonjour,
    Je débute en réseau et je suis souvent confronter au broken pipe. Je voudrais savoir si il exsiste un moyen de les éviter. J'ai remarquer que les broken pipe survenait lorsque je tentais de write sur une socket close. Si vous avez d'autre cas de figure et des solutions a m'àpporter, se serait sympas.
    Merci.

  2. #2
    Modérateur
    Avatar de Obsidian
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Septembre 2007
    Messages
    7 370
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2007
    Messages : 7 370
    Points : 23 625
    Points
    23 625
    Par défaut
    Bonsoir,

    « broken pipe » signifie littéralement « tube brisé ». Ça veut dire que, justement, l'une des deux extrémités du tube s'est refermée de manière prématurée et que, donc, il n'est plus possible d'écrire dedans. Cela se produit dans trois grands cas de figure :

    • Soit tu dialogues à travers un socket avec un client réseau et celui-ci a refermé sa connexion (ou l'a perdue) ;
    • Soit la connexion elle-même est interrompue entre les deux parce que le matériel qui la véhicule a cessé de le faire (par exemple : coupure téléphonique) ;
    • Soit tu as créé deux processus distincts partageant un tube (typiquement un père et un fils) et le lecteur meurt avant l'autre (par exemple, à cause d'une erreur non gérée).


    Il est tout-à-fait normal que le rédacteur se termine avant le lecteur : lorsqu'il n'a plus rien à envoyer, il referme son extrémité et le lecteur est prévenu en recevant un paquet d'une longueur de zéro octet. Par contre, il n'est pas normal qu'un rédacteur qui n'a pas fini de transmettre se fasse raccrocher au nez avant la fin.

    Le message « broken pipe » apparaît dans un shell lorsque ton processus a reçu le signal SIGPIPE et en est mort. Maintenant, pour éviter cela, il y a deux possibilités :
    • Soit c'est bien toi qui a créé les deux processus et, dans ce cas, tu dois revoir ton lecteur pour qu'il se comporte proprement et qu'il ne referme pas son tube avant d'être certain qu'il n'y a plus rien à lire ;
    • Soit tu écris un serveur réseau et, dans ce cas, c'est une éventualité que tu dois prendre en charge.


    Dans cette hypothèse, tu dois écrire un handler pour le signal en question et l'enregistrer avec signal() ou sigaction(). Lorsque tu le reçois, tu dois agir en conséquence, en considérant que le tube est d'ores et déjà refermé et que c'est indépendant de ta volonté. « Agir » consiste alors à retomber sur ses pattes, à refermer le descripteur du tube ou socket concerné, faire le ménage, afficher éventuellement un message d'erreur et reprendre le cours normal du déroulement de ton programme.

Discussions similaires

  1. Eviter les warnings "unused parameter"
    Par Le Furet dans le forum C
    Réponses: 9
    Dernier message: 03/10/2005, 22h29
  2. Eviter les doublons
    Par cyrill.gremaud dans le forum ASP
    Réponses: 5
    Dernier message: 14/09/2005, 12h37
  3. Réponses: 4
    Dernier message: 13/08/2004, 18h39
  4. [langage] 2 fichier dans 1 en evitant les doublons
    Par remixxl dans le forum Langage
    Réponses: 6
    Dernier message: 26/07/2004, 17h05
  5. [C#] Comment eviter les boucles infinies ?
    Par Thomas Lebrun dans le forum C#
    Réponses: 12
    Dernier message: 09/06/2004, 00h04

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