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

POSIX C Discussion :

Broken Pipe & Sockets


Sujet :

POSIX C

  1. #1
    Membre éclairé Avatar de |PaRa-BoL
    Profil pro
    Inscrit en
    Novembre 2003
    Messages
    738
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations forums :
    Inscription : Novembre 2003
    Messages : 738
    Points : 876
    Points
    876
    Par défaut Broken Pipe & Sockets
    Bonjour,

    J'aimerai avoir des informations utile pour la programmation des sockets et le broken pipe.

    Dans quel cas précis intervient il ? Quand on essaye d'envoyer des données à un mauvais descripteur de fichiers ? (user deconnecté) ? D'en d'autre cas ?

    Comment bien intéragir avec cette situation ? Je me contente uniquement de bloquer le signal SIGPIPE; mais je supose qu'il y'a d'autre chose à faire ?


    Merci

  2. #2
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Septembre 2006
    Messages
    2 937
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2006
    Messages : 2 937
    Points : 4 358
    Points
    4 358
    Par défaut
    Citation Envoyé par |PaRa-BoL
    Bonjour,

    J'aimerai avoir des informations utile pour la programmation des sockets et le broken pipe.

    Dans quel cas précis intervient il ? Quand on essaye d'envoyer des données à un mauvais descripteur de fichiers ? (user deconnecté) ? D'en d'autre cas ?

    Comment bien intéragir avec cette situation ? Je me contente uniquement de bloquer le signal SIGPIPE; mais je supose qu'il y'a d'autre chose à faire ?


    Merci
    comme son nom l'indique le "broken pipe" signifie que l'autre côté du pipe est déconnecté…

    comment réagir dépend de votre application mais dans le cadre d'un serveur il est évident que ni bloquer le signal ni laisser le serveur être "killed" ne sont des solutions viables…

    il faut installer un handler avec signal() ou sigaction()…

    (notez que pour des commandes Unix classiques comme tail, more, … le comportement par défaut est bien de se laisser "tuer"… ce qui est le comportement le plus "acceptable", le broken pipe étant alors souvent le résultat de l'utilisateur tapant ctrl-c pour arrêter une commande trop longue, par exemple dans un "cat very_big_file | more" …)

  3. #3
    Membre éclairé Avatar de |PaRa-BoL
    Profil pro
    Inscrit en
    Novembre 2003
    Messages
    738
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations forums :
    Inscription : Novembre 2003
    Messages : 738
    Points : 876
    Points
    876
    Par défaut
    Et bien dans mon server je n'ai fait qu'un signal avec un return pour que ca passe en transparant.

    Mais comment je peut recuperer ou passer des param à la function appelé par le signal ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    signal(SIGPIPE, &signal_pipe);
    Cela apel donc la function signal_pipe() mais comment lui faire passer des paramètres ? Je supose que je doit lire la doc sur les sugnal*() xd

    Merci

  4. #4
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Septembre 2006
    Messages
    2 937
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2006
    Messages : 2 937
    Points : 4 358
    Points
    4 358
    Par défaut
    Citation Envoyé par |PaRa-BoL
    Et bien dans mon server je n'ai fait qu'un signal avec un return pour que ca passe en transparant.

    Mais comment je peut recuperer ou passer des param à la function appelé par le signal ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    signal(SIGPIPE, &signal_pipe);
    Cela apel donc la function signal_pipe() mais comment lui faire passer des paramètres ? Je supose que je doit lire la doc sur les sugnal*() xd

    Merci

    sorry, j'ai été trop vite pour répondre,
    pour SIGPIPE vous pouvez le masquer mais alors traitez correctement l'errreur renvoyée par write() ou sendto() (EPIPE)
    (et n'oubliez pas de réessayer le write, sendto, … si l'erreur est EINTR… - ce qui est valable aussi pour connect, accept, …)

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    760
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 760
    Points : 626
    Points
    626
    Par défaut
    Si on considere le problem en local, existe il un moyen simple de voir que le pipe n'est plus ouvert (en sortie, ou en entrée ?)

  6. #6
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Septembre 2006
    Messages
    2 937
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2006
    Messages : 2 937
    Points : 4 358
    Points
    4 358
    Par défaut
    Citation Envoyé par TabrisLeFol
    Si on considere le problem en local, existe il un moyen simple de voir que le pipe n'est plus ouvert (en sortie, ou en entrée ?)
    en sortie, un write génère un EPIPE (si SIGPIPE est masqué…)
    en entrée, un read sera infini… donc on peut le détecter par un time-out…
    ce qui implique l'utilisation de select()…

Discussions similaires

  1. Exception Broken pipe
    Par yarf dans le forum Entrée/Sortie
    Réponses: 7
    Dernier message: 08/04/2020, 17h54
  2. [Socket Exception] Broken Pipe
    Par GyZmoO dans le forum Entrée/Sortie
    Réponses: 1
    Dernier message: 21/01/2010, 10h50
  3. Broken Pipe sur un envoi de mail
    Par El_touristo dans le forum Langage
    Réponses: 1
    Dernier message: 25/10/2007, 16h04
  4. Perl et Signaux : Broken Pipe
    Par MarneusCalgarXP dans le forum Langage
    Réponses: 22
    Dernier message: 16/07/2007, 13h14
  5. Erreur Broken Pipe + Mysql + Tomcat
    Par akademiks dans le forum Hibernate
    Réponses: 1
    Dernier message: 04/09/2006, 16h33

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