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 :

Pourquoi fermer la socket de connexion avant le traitement de fork ?


Sujet :

Réseau C

  1. #1
    Membre du Club
    Homme Profil pro
    Inscrit en
    Février 2010
    Messages
    118
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 118
    Points : 43
    Points
    43
    Par défaut Pourquoi fermer la socket de connexion avant le traitement de fork ?
    Bonjour les développeurs ,

    Dans l'utilisation de fork en ferme la socket de connexion avant le traitement (pour l'info je fais des sockets sous C)

    Exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
        pid = fork();
     
       if ( pid==0 ) // création de processus fils
       {    close(socketConnexion);  // LA QUESTION EST A CE POINT 
            // en commence le traitement 
       }
    Pour quel raison on ferme la socket de connexion avant le début de traitement ???

    MERCI d'avance

  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
    Bonjour,

    Fermer un socket, ça dépend vraiment du contexte. Il n'y a pas de raison particulière. Par contre, fermer un tube (ou pipe en anglais) c'est très fréquent.

    L'idée est que, pour communiquer entre deux processus distinct, tu vas utiliser un tube anonyme, créé avec la fonction pipe(). Un tube est unidirectionnel, donc les données ne circuleront que dans un sens. Cela dit, la fonction en question va quand même te renvoyer deux descripteurs : le premier en lecture, correspondant à une extrémité du tube, et l'autre en écriture, correspondant à l'autre extrémitié.

    Or, le seul moyen de transmettre ces informations à ton processus fils est de le faire par héritage : au moment où tu exécutes fork(), les processus père et fils disposent tous deux des DEUX descripteurs.

    Donc, juste après la mitose, le processus écrivain referme son descripteur en lecture et le processus lecteur referme son descripteur en écriture. Une fois que c'est fait, on peut se mettre au travail.

  3. #3
    Membre émérite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2008
    Messages
    1 515
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Octobre 2008
    Messages : 1 515
    Points : 2 505
    Points
    2 505
    Par défaut
    Elle sort d'où la socket socketConnexion ?

  4. #4
    Membre du Club
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Février 2009
    Messages
    34
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : Conseil

    Informations forums :
    Inscription : Février 2009
    Messages : 34
    Points : 59
    Points
    59
    Par défaut
    Citation Envoyé par geeksDeve Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
        pid = fork();
     
       if ( pid==0 ) // création de processus fils
       {    close(socketConnexion);  // LA QUESTION EST A CE POINT 
            // en commence le traitement 
       }
    Un programme ouvre un socket, puis effectue un fork, le parent et l'enfant auront à disposition un ID de socket correspondant au même socket. Pour effectivement fermer ce socket, il faudra impérativement que les deux (l'enfant et le parent) ferment ce socket. Voir http://cui.unige.ch/~garg/systinfo/tips/unix/fork.html

Discussions similaires

  1. Socket : Fermer le socket en attente de connexion
    Par benji1801 dans le forum Entrée/Sortie
    Réponses: 8
    Dernier message: 13/05/2011, 18h32
  2. [OS] Fermer un socket port
    Par riete dans le forum Développement OS X
    Réponses: 2
    Dernier message: 13/05/2008, 09h01
  3. command pour fermer une socket
    Par yli_ren dans le forum Réseau
    Réponses: 3
    Dernier message: 01/06/2007, 10h43
  4. socket pthread connexion
    Par cmoibal dans le forum Réseau
    Réponses: 1
    Dernier message: 23/05/2007, 13h12
  5. Réponses: 6
    Dernier message: 25/08/2006, 20h01

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