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

Linux Discussion :

gestion des signaux


Sujet :

Linux

  1. #1
    Futur Membre du Club
    Inscrit en
    Février 2008
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : Février 2008
    Messages : 6
    Points : 5
    Points
    5
    Par défaut gestion des signaux
    Bonjour à toutes et à tous je sollicite votre aide car j'ai un souci dans la gestion des signaux d'un mini server http que je créer.

    En effet je souhaiterais qu'a la reception du signal SIGHUP mon serveur actionne la fonction sa_handler() ou il affiche "youpi" (juste un test pour l'instant).
    Jusque là tout se passe correctement sauf qu'une fois youpi affiché le serveur stop son processus en effet il me dit qu'il ya une erreur au niveau du accept() avec un "Interrupted system call" ce qui signifit je suppose que le signal stop mon processus. Alors que je pensais l'avoir gérer. Pouvez vous m'éclairer merci d'avance...

    PS: la fonction init() initialise tout mon serveur.
    Voici la partie du code concernée
    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
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
     void signal_handler()
    {
    printf("youpi");
    }
    int main() {
    	struct sigaction sa;
    	memset(&sa,0,sizeof sa);
    	sa.sa_handler=signal_handler;
    	sa.sa_flags=0;
    	sigemptyset(&(sa.sa_mask));	
    	if(sigaction(SIGHUP,&sa,NULL)!=0)
    	{perror("erreur sigaction");
    	exit(2);
    	}
     
    	init();
            desc=socket(AF_INET,SOCK_STREAM,0);
    	//initialisation de la structure adresse        
     
            if(bind(desc,(struct sockaddr *)&adresse,longueur)==-1)
                    { perror("Erreur bind"); exit(1); }
     
            //ecoute
            if(listen(desc,5)==-1)
                    { perror("Erreur a l'ecoute"); exit(1); }
     
            while(1)
            {	
    		pthread_t pid;
                    if((desc2=accept(desc, (struct sockaddr *)&adresse, &longueur)) < 0)
                    {
     
    			perror("erreur accept \n" );
                                 exit(1);
                    }

  2. #2
    Membre éclairé Avatar de valefor
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    711
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 711
    Points : 790
    Points
    790
    Par défaut
    Ben c'est bien toi qui a mis le "exit(1)" ?

    Je pense que c'est à cause de cela que ton programme se termine. En cas d'erreur sur le accept, tu n'est aps obligé de "sortir".

  3. #3
    Futur Membre du Club
    Inscrit en
    Février 2008
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : Février 2008
    Messages : 6
    Points : 5
    Points
    5
    Par défaut merci
    Merci beaucoup. Cela fonctionne, cependant j'aimerais savoir pourquoi il y a forcement une erreur au 1er accept qui suit l'envoi du signal ???

Discussions similaires

  1. gestion des signaux des touches directionnelles
    Par sedd1991 dans le forum GTK+ avec C & C++
    Réponses: 0
    Dernier message: 01/05/2012, 18h44
  2. Gestion des signaux : SIGTSTP
    Par BSans dans le forum C
    Réponses: 1
    Dernier message: 22/12/2011, 16h17
  3. gestion des signaux
    Par uriotcea dans le forum Débuter
    Réponses: 6
    Dernier message: 15/01/2010, 10h02
  4. Gestion des signaux
    Par damien77 dans le forum Bibliothèque standard
    Réponses: 12
    Dernier message: 01/03/2008, 22h39
  5. Gestion des signaux
    Par Kicker dans le forum Administration système
    Réponses: 4
    Dernier message: 23/05/2007, 15h40

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