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

  1. #1
    Membre averti
    processus fils qui garde la socket du parent ouverte et en LISTEN
    Bonjour,

    Dans mon programme en C, j'appelle un script qui lance un autre programme en mode détaché. Donc ce programme ne quitte pas lorsque mon programme principal se ferme.

    Mon problème c'est que dans mon programme principal j'ouvre une socket et je suis en LISTEN dessus.

    Et j'ai remarqué que mon programme secondaire se retrouve lui aussi en LISTEN sur le même port.
    J'ai simplifié mon programme secondaire et il ne fait rien d'autre qu'une boucle while infinie, et j'ai encore le problème.
    Du coup quand je veux relancer mon programme principal, le bind échoue.

    J'ai essayé de lancer mon script avec "system" ou execvp, et c'est pareil.

    Pouvez vous m'expliquer comme ça se fait, et comment le corriger ?

    merci.

  2. #2
    Membre confirmé
    Pourquoi ne pas lancer ta socket dans ton programme secondaire??

  3. #3
    Membre averti
    car ce n'est pas mon programme secondaire qui est sensé écouter sur la socket.

    Pour éclaircir un peut le fonctionnement :
    programme principal = pA
    programme secondaire = pB

    pA est un serveur, qui ouvre une socket, et traite les messages de cette socket.
    pB est une appli qui fait tout autre chose, et qui doit être lancé a un moment donné par pA.

    pA ouvre la socket, traite des messages, puis lance pB.

    problème :
    pB se retrouve lui aussi en listen sur la socket, ce que je ne veux pas.

  4. #4
    Membre confirmé
    Si pB est lancé à un moment donné par pA, tous les sockets se trouvant dans pA seront visibles par pB. Pourquoi ne pas utiliser un pipe pour les échanges de msg

  5. #5
    Membre averti
    mais je ne veux PAS que la socket soit ouverte dans pB. Car c'est pA qui doit gérer les messages sur cette socket. Ces messages viennent de clients qui se connectent à pA.

    Et je n'ai pas besoin d'échanger de message entre pA et pB.

  6. #6
    Membre émérite
    Après ton appel à socket() dans pA, fait un
    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    fcntl(sock, F_SETFL, FD_CLOEXEC);
    "The quieter you become, the more you are able to hear"
    "Plus vous êtes silencieux, plus vous êtes capable d'entendre"

  7. #7
    Membre averti
    merci, ça marche !

    Par contre seulement avec les fonctions exec et pas "system" (mais c'est bien ce que dit la doc).

  8. #8
    Expert éminent sénior
    Enfin normalement, system() est supposée faire un fork et un exec, donc...
    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.

  9. #9
    Membre émérite
    Citation Envoyé par Médinoc Voir le message
    Enfin normalement, system() est supposée faire un fork et un exec, donc...
    Ou se comporter comme si, absolument.
    "The quieter you become, the more you are able to hear"
    "Plus vous êtes silencieux, plus vous êtes capable d'entendre"

  10. #10
    Membre averti
    Dans la doc ils parlent seulement de exec.
    Il m'a semblé qu'avec system ca ne marchait pas, mais j'ai pas poussé mes tests plus loin que ca, donc je n'en suis pas sur.

  11. #11
    Membre émérite
    Pas de test, la norme est suffisante :
    http://www.opengroup.org/onlinepubs/000095399/functions/system.html
    The environment of the executed command shall be as if a child process were created using fork(), and the child process invoked the sh utility using execl()
    "The quieter you become, the more you are able to hear"
    "Plus vous êtes silencieux, plus vous êtes capable d'entendre"

###raw>template_hook.ano_emploi###