diff --git a/webserver/.main.c.swp b/webserver/.main.c.swp new file mode 100644 index 0000000000000000000000000000000000000000..02609d8d567ee0afd05e5399fd09b580d73179ae Binary files /dev/null and b/webserver/.main.c.swp differ diff --git a/webserver/.socket.c.swp b/webserver/.socket.c.swp index 36066abd09b6d63155fdf784302f40a32c2a53c0..0173fa2adbb145280321885f721fe4c81118667f 100644 Binary files a/webserver/.socket.c.swp and b/webserver/.socket.c.swp differ diff --git a/webserver/main.c b/webserver/main.c index 20c2a69805081a7ff5d3e91b20d942815c22896b..20fc092ab8355fc72a15569b9395b79fd01154d3 100644 --- a/webserver/main.c +++ b/webserver/main.c @@ -2,12 +2,28 @@ #include <string.h> #include <signal.h> #include "socket.h" +#include <sys/types.h> +#include <sys/wait.h> +int status; + +void traitement_signal(int sig) { + printf("Signal %d reçu\n", sig); + waitpid(sig,&status,0); +} + void initialiser_signaux(void) { if (signal(SIGPIPE, SIG_IGN) == SIG_ERR) { perror("signal"); } + struct sigaction sa; + sa.sa_handler = traitement_signal; + sigemptyset(&sa.sa_mask); + sa.sa_flags = SA_RESTART; + if (sigaction(SIGCHLD, &sa, NULL) == -1) { + perror("sigaction(SIGCHLD)"); + } } diff --git a/webserver/main.o b/webserver/main.o index 16c42a2da10ef21faf2f6937a4ac6a8824af92e5..fb874988970a6be8d0039de0c50ef3347c5b3b79 100644 Binary files a/webserver/main.o and b/webserver/main.o differ diff --git a/webserver/pawnee b/webserver/pawnee index 4769e4d4a9faee65d9a246c9fd1acb0f8d1da359..0b44b9bf2da5f5c07bca4b302ec12129843f68a5 100755 Binary files a/webserver/pawnee and b/webserver/pawnee differ diff --git a/webserver/socket.c b/webserver/socket.c index 8abb0e2fddff07b12f49fe63049f93779f0d9772..62c9b0de91abb30fb84df2e325996c70a8dcbe6f 100644 --- a/webserver/socket.c +++ b/webserver/socket.c @@ -6,6 +6,7 @@ #include <sys/wait.h> #include <stdlib.h> + int creer_serveur(int port){ //socket int socket_serveur; @@ -57,6 +58,7 @@ int creer_serveur(int port){ exit(1); }else if(pid > 0) { //close(socket_client); fait une erreur si on le met + traitement_signal(SIGCHLD); }else{ /* On peut maintenant dialoguer avec le client */ const char *message_bienvenue = "Bonjour, bienvenue sur mon serveur\nExcogitatum est super his, ut homines quidam ignoti, vilitate ipsa parum cavendi ad colligendos rumores per Antiochiae latera cuncta destinarentur relaturi quae audirent. hi peragranter et dissimulanter honoratorum circulis adsistendo pervadendoque divites domus egentium habitu quicquid noscere poterant vel audire latenter intromissi per posticas in regiam nuntiabant, id observantes conspiratione concordi, ut fingerent quaedam et cognita duplicarent in peius, laudes vero supprimerent Caesaris, quas invitis conpluribus formido malorum inpendentium exprimebat.Sed fruatur sane hoc solacio atque hanc insignem ignominiam, quoniam uni praeter se inusta sit, putet esse leviorem, dum modo, cuius exemplo se consolatur, eius exitum expectet, praesertim cum in Albucio nec Pisonis libidines nec audacia Gabini fuerit ac tamen hac una plaga conciderit, ignominia senatus.Post emensos insuperabilis expeditionis eventus languentibus partium animis, quas periculorum varietas fregerat et laborum, nondum tubarum cessante clangore vel milite locato per stationes hibernas, fortunae saevientis procellae tempestates alias rebus infudere communibus per multa illa et dira facinora Caesaris Galli, qui ex squalore imo miseriarum in aetatis adultae primitiis ad principale culmen insperato saltu provectus ultra terminos potestatis delatae procurrens asperitate nimia cuncta foedabat. propinquitate enim regiae stirpis gentilitateque etiam tum Constantini nominis efferebatur in fastus, si plus valuisset, ausurus hostilia in auctorem suae felicitatis, ut videbatur."; @@ -65,6 +67,7 @@ int creer_serveur(int port){ sleep(1); } close(socket_client); + initialiser_signaux(); exit(0); } } diff --git a/webserver/socket.h b/webserver/socket.h index 36a23ed7d0ef47bca3475c63f506a4ab0ad98e72..002ecc8cdcc28e6a650b1a62897fef8f090baf91 100644 --- a/webserver/socket.h +++ b/webserver/socket.h @@ -5,5 +5,7 @@ de la machine sur le port passé en paramètre. La socket retournée doit pouvoir être utilisée directement par un appel à accept. La fonction retourne -1 en cas d'erreur ou le descripteur de la socket créée. */ +void traitement_signal(int sig); +void initialiser_signaux(void); int creer_serveur(int port); #endif diff --git a/webserver/socket.o b/webserver/socket.o index 01cfd92ce54f541cc5bafab22cbd8b0eba180093..69669a0b4e38637e404419002cd15e253cff4ba0 100644 Binary files a/webserver/socket.o and b/webserver/socket.o differ