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); }
Partager