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 :

probleme theorique sur soket et multithreading.


Sujet :

Réseau C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre extrêmement actif
    Avatar de lilington
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2005
    Messages
    681
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Chine

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juin 2005
    Messages : 681
    Par défaut probleme theorique sur soket et multithreading.
    bonjours,
    avant de commencer a ecrire j'ai trouve la solution de mon premier problem, mais je vais quand meme presenter le problem histoire de voir si on peut pas faire mieux:

    j'ai un serveur S qui est sense recevoir un nom de programme et le lancer.
    si vous faite telnet localhost PORT et
    >a.out

    le serveur execute fork et execv pour lancer a.out
    le probleme que j'avais c'etait que si je ferme le serverur et que je le relance apres avoir lance a.out j'ai BIND error. j'avais vu que exec changeait le code du child mais j'avais oublie que les references au descripteurs listen et accept etaient aussi copier (niveau Kernel)

    donc ma solution a ete de close les deux descripteurs dans les fils voici le code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
        if(bind(listenfd,(struct sockaddr *)&server,sizeof(server))<0)
        {
            fprintf(stderr,"Bind error \n");
            return EXIT_FAILURE;
        }
     
        Listen(listenfd,G_BACKLOG);
     
        len=sizeof(client);
        connfd=accept(listenfd,(struct sockaddr*) &client,&len);
         //version simplifier ici desqu'il y a connection on lance l'application rien et on sort
        char * arg_list[]={"./rien","sortie.txt",NULL};
        spawn("./rien",arg_list,connfd,listenfd);
    code de spawn
    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
    int spawn(char * program,char ** arg_list,int fd,int fd2)
    {
        pid_t child;
        child=fork();
     
        if (child!=0)
            return child;
        else
        {
            close(fd);
            close(fd2);
            fprintf(stdout,"starting %s\n",program);
            execvp(program,arg_list);
        }
    }
    ca marche netstat me dit que le port est libere et l'application "rien" tourne sans probleme, je peux relancer le serveur sans probleme. quand je supprime l'un des closes le port est occupe par "rien" en LISTEN ou END_WAIT selon le descripteur ferme.
    donc mon probleme est resolut si il ya mieux merci de me le dire.

    le nouveaux probleme:
    j'aimerai utilise des thread pour gerer les differentes requetes, j'aimerai savoir alors dans ce cas ce qui va se passer d'un point de vu theorique quand les connections arrivent.
    si T1 recois une connection il doit traiter le message recu et si il y a lieu faire le fork/execv pour lancer une application. mais comment fermer les descripteurs? lesquels seront vraiment ferme? est-ce que chaque thread a son propre descripteur ou est-ce une reference comme avec fork?

  2. #2
    Modérateur
    Avatar de gangsoleil
    Homme Profil pro
    Manager / Cyber Sécurité
    Inscrit en
    Mai 2004
    Messages
    10 150
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Manager / Cyber Sécurité

    Informations forums :
    Inscription : Mai 2004
    Messages : 10 150
    Par défaut
    Bonjour,

    Les descripteurs sont partages par les differents threads d'une meme application.

    A part ca, je n'ai pas suffisamment bien compris ce que tu cherches a faire pour savoir comment t'aider..
    "La route est longue, mais le chemin est libre" -- https://framasoft.org/
    Les règles du forum

  3. #3
    Membre extrêmement actif
    Avatar de lilington
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2005
    Messages
    681
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Chine

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juin 2005
    Messages : 681
    Par défaut
    Citation Envoyé par gangsoleil Voir le message
    Bonjour,

    Les descripteurs sont partages par les differents threads d'une meme application.

    A part ca, je n'ai pas suffisamment bien compris ce que tu cherches a faire pour savoir comment t'aider..
    si je t'ai bien compris dans un tthreads la fermeture du descripteur ferme le fichier donc je dois eviter de le faire.
    ce que je cherche a faire c'est qu'une connection entrante est gere par un thread et si lors de cette connection un message demandant de lancer une application en envoye la requete est analyse dans le thread et l'application est lance via fork/exec. mais surtout je dois pourvoir fermer le serveur et le relancer sans conflict au niveau du port.

Discussions similaires

  1. Probleme bizarre sur relief d'un bouton
    Par Kara dans le forum Balisage (X)HTML et validation W3C
    Réponses: 3
    Dernier message: 21/07/2005, 11h32
  2. [delphi6]probleme dbgrid sur un tpagecontrol
    Par macadam314 dans le forum Bases de données
    Réponses: 2
    Dernier message: 10/04/2005, 15h54
  3. Probleme "onmouseout" sur IE seule
    Par softflowe dans le forum Balisage (X)HTML et validation W3C
    Réponses: 5
    Dernier message: 06/10/2004, 14h04
  4. Probleme install sur RedHat
    Par delph_b dans le forum Installation
    Réponses: 5
    Dernier message: 27/05/2004, 09h09
  5. Réponses: 3
    Dernier message: 17/05/2004, 17h28

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