From ed1bbf9ce78ab64d5493326da9751e8e7c47c11b Mon Sep 17 00:00:00 2001
From: Manax <paul.ripault.etu@univ-lille.fr>
Date: Mon, 1 Feb 2021 16:37:17 +0100
Subject: [PATCH] Cotcot

---
 webserver/main.c        |   6 +++--
 webserver/main.o        | Bin 2776 -> 2968 bytes
 webserver/pawnee        | Bin 17736 -> 17784 bytes
 webserver/socket.c      |  18 +++++++-------
 webserver/socket.c.save |  51 ----------------------------------------
 webserver/socket.o      | Bin 4672 -> 4808 bytes
 6 files changed, 14 insertions(+), 61 deletions(-)
 delete mode 100644 webserver/socket.c.save

diff --git a/webserver/main.c b/webserver/main.c
index 20fc092..e5da6a0 100644
--- a/webserver/main.c
+++ b/webserver/main.c
@@ -8,7 +8,9 @@ int status;
 
 void traitement_signal(int sig) {
 	printf("Signal %d reçu\n", sig);
-	waitpid(sig,&status,0);
+    int pid;
+	while((pid = waitpid(-1,&status,WNOHANG))>0){printf("pid terminated %d\n",pid);} //-1 n'importe quel proccessus
+    printf("Pourquoi tu marches pas ?");
 }
 
 
@@ -35,7 +37,7 @@ int main(int argc, char **argv) {
 		printf("Don't Panic!\n");
 	return 42;
 	}
-	initialiser_signaux();
+	initialiser_signaux(); 
 	printf("Need an advice?\n");
 	creer_serveur(8080);
 	return 0;
diff --git a/webserver/main.o b/webserver/main.o
index fb874988970a6be8d0039de0c50ef3347c5b3b79..cff4429d0ddfdc825257e82d4031154ed7e9210b 100644
GIT binary patch
delta 712
zcmca1IzxPd22%vbL@n7^h0fYH-L7vsk9qXkGB7YO>;MrjK*VdYZr49p#CI_=Ffe%Z
znu65q|NsC0f3WIK*FVj*e;DddBb&3ah>20BATvdwB(*3vGcU0uHAO)+g^M8|zqF{Z
zG(S_Jq*Ng{u_!qswOFAbu~@-=axr7<<nxTGLOCGQ9r*;>n4Edpn9_OJIX1H~IWaQk
zO!j0BXUv(rkhz@k?Pf_9c}7O<$&IYyjHZ(nS;ZwCLE0D?7?>Cs7&sXi82*6V_y7NY
z@5zCz;*!xwvaAdY3<^+wDoC$k6O_loz`($dq_-a`4l)y@%L>Y$GFgyKoN@N#jjZC5
zTcKhgy@E)3uTFl*DlYjDDho3K=E`Rv6Y2#(;R$s!$ovqfY6++~$V?F=GnJv@Fw<h7
z>NTL^AoZe1>P?Wu`H;k|A>vx#zyevE2{p(8BEf)ekk{mkZ1#*flLgtu8Q)IUWIxXs
zI{7ENIadZqGXn#I1Jh(H4l~B7lM6ZQ8K+L($YIYp6>3!N<Ul6j$vm7YoI)UHGcYj7
zf<=5dRhaadCQoD+o1DPJGP#FSh0_44pklHhv+(3IoGMH!*e8GDv}0T`*^tYg@xtUn
NE_=oglQ(jy0{{*ot84%O

delta 552
zcmbOsenWJE2Gb1oiCVJS0-d#gx?TTt9`oq6Wnf@n*a0G5fQW9_Kf6G*N3SV}>O8)2
z2@~Vw%ZxFT4VYAftUzLpd;)Du&b(};JnS3{o70$_7#Xc5uVfBqw3^JwQqH)0b0v#B
zqofW<DFXuo69WSSCj$e+pZ^eGJozE3xM2WPmW6?VfgedW7Ag+X#md0IzzgLkO}@w`
z&X_s5kWE~&87c<SD~P0b@#KYU;*#s3vM>`wp!_W$6YB3lc`#XZDE}Fh2AK)c0dws~
zs5nf$K9v6rN`uskBDsNy5h4K+=R*?bgoq1)g9GF-8;CjvzR8B{;*1iLC$if!T1~#l
zF3z}n@=NyfjLMUDa+q^*fRr*YFg#$K{ENekF?q5fr#)lx<U&q+&SZ#*3;~ljG6_#U
z!>Pi#87d+R7UAJiVZ1QekW+nf1eXNo1*lxb<U(fQ$vs>uOfT3bZ{o6J^qBmS%bu}d
OvLUxUqrv1tZgl`p0)hkp

diff --git a/webserver/pawnee b/webserver/pawnee
index 0b44b9bf2da5f5c07bca4b302ec12129843f68a5..8a6991483167ea05d0bf0fd36affbf54a91418e6 100755
GIT binary patch
delta 2535
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

delta 2265
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
BeQy8&

diff --git a/webserver/socket.c b/webserver/socket.c
index 62c9b0d..bae8558 100644
--- a/webserver/socket.c
+++ b/webserver/socket.c
@@ -54,20 +54,22 @@ int creer_serveur(int port){
 
 		int pid = fork();
 		if(pid == -1){
-			perror("dork fail");
+			perror("fork fail");
 			exit(1);
 		}else if(pid > 0) {
 			//close(socket_client);  fait une erreur si on le met
-			traitement_signal(SIGCHLD);
-		}else{
+            
+		}else{ // à déplacer ailleurs pour une meilleure lisibilité
 			/* 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.";
-			while(1){
-				write(socket_client, message_bienvenue, strlen(message_bienvenue));
+
+            int status = 1;
+			while(status>0){
+				status = write(socket_client, message_bienvenue, strlen(message_bienvenue));
 				sleep(1);
-			}
-			close(socket_client);
-			initialiser_signaux();
+			} //traitement final
+			printf("fin du client\n");
+            close(socket_client);
 			exit(0);
 		}
 	}
diff --git a/webserver/socket.c.save b/webserver/socket.c.save
deleted file mode 100644
index 626d349..0000000
--- a/webserver/socket.c.save
+++ /dev/null
@@ -1,51 +0,0 @@
-#include <string.h>
-#include <unistd.h>
-#include <stdio.h>
-#include "socket.h"
-#include <netinet/in.h>
-
-int creer_serveur(int port){
-//socket
-	int socket_serveur;
-	socket_serveur = socket(AF_INET, SOCK_STREAM, 0);
-	if (socket_serveur == -1) {
-		/* traitement de l'erreur */
-		perror("socket_serveur");
-	}
-	/* Utilisation de la socket serveur */
-//bind
-	struct sockaddr_in saddr;
-	saddr.sin_family = AF_INET; /* Socket ipv4 */
-	saddr.sin_port = htons(port); /* Port d'écoute */
-	saddr.sin_addr.s_addr = INADDR_ANY; /* écoute sur toutes les interfaces */
-	if (bind(socket_serveur, (struct sockaddr *)&saddr, sizeof(saddr)) == -1){
-		perror("bind socker_serveur");
-		/* traitement de l'erreur */
-	}
-//listen
-	if (listen(socket_serveur, 10) == -1) {
-		perror("listen socket_serveur");
-		/* traitement d'erreur */
-	}
-
-	int socket_client;
-	socket_client = accept(socket_serveur, NULL, NULL);
-	if (socket_client == -1) {
-		perror("accept");
-		/* traitement d'erreur */
-	}
-	/* On peut maintenant dialoguer avec le client */
-	const char *message_bienvenue = "Game of Thrones [geɪm əv θɹoʊnz]a, également appelée Le Trône de fer;b (selon le titre français de l'œuvre romanesque dont elle est adaptée) est une série télévisée américaine de Fantasy1 créée par David Benioff et D. B. Weiss, diffusée entre le 17 avril 2011 et le 19 mai 2019 sur HBO aux États-Unis en simultané sur HBO Canada au Canada.
-
-Il s'agit de l'adaptation de la série de romans écrits par George R. R. Martin depuis 1996, saga réputée pour son réalisme et par ses nombreuses inspirations tirées d’événements, lieux et personnages historiques réels, tels que la guerre des Deux-Roses, le mur d'Hadrien ou Henri VII Tudor2.
-
-En France, elle est diffusée depuis le 5 juin 2011 sur OCS Cinechoc, devenue OCS Choc, sur Canal+ depuis le 10 janvier 2013 et rediffusée en clair sur D8 (devenue C8) à partir du 28 octobre 2013 et sur D17 (devenue CStar) en 2014.\n";
-	write(socket_client, message_bienvenue, strlen(message_bienvenue));
-
-	int optval=1;
-	if (setsockopt(socket_client, SOL_SOCKET, SO_REUSEADDR, &optval, sizeof(int)) == -1) {
-		perror("Can not set SO_REUSEADDR option");
-		return -1;
-	}
-	return 0;
-}
diff --git a/webserver/socket.o b/webserver/socket.o
index 69669a0b4e38637e404419002cd15e253cff4ba0..358fd4b8417552b17f53160f85287dbd889789b5 100644
GIT binary patch
delta 578
zcmX@0azb^224lxWO^e9^jItB!co~08?1|+3u}gq~fx)Bm+{F1xtlh3Z_Hj*|qsrgy
z`ePRZ0|Uc85Yc&jaxSCF<XlE}mJiLfA0{g@O4c{meqg9y?9s~#QsB|)`r^3jA4UcS
zhS$0t-L5Y@I*-4ANF4I$_I=Uq`o*L398|2+_0N8gO0a_F+CL2SXFYmtL8`$b-L7At
z3irds7#NE4le1Gx;)_#@%2G><7#JphU<_nT+w8>T&c>UTnWvCas*s$MnVMHJxr0Mt
z@-hxJ#(k5|a{Ol8xA`O|KO<w|<cpl*jOAdm7ECsQ$jJ)aS+d0?MLDT?4CO_cC8-R>
zIjN}y3<aen#SF<g`NgT5*K<cQF-A>R<P%pd2DzGnfq{jAfkA|Uf#J`82xvzV7o8l-
zCq6lbkH>Q%RFsK<fdLdqOW8o)VPIGW6$hCjj%3OPBykBO@m-TA@`_Jx;CsNhZ*n5P
zIoAhnh&d9>lNa%uG5uql{E$Oz@&|qm7}G#NgOdSdD+2?=_Q{C?=8W4X&lIp{y21fb
yDWJi4W3r^6Jrf82<S0QqP61Acff17z3Yv3fK#lL1{7}%GQ-L2MmpJ($zdQgs&9EB)

delta 413
zcmX@1dO&4@1|!2nO$(Mk&9#3fD>6z>tm9?;GqER<^Up2;1_lO?&T|vzE3tOF{@KSh
zagHi~x9gu>3=9km`#?nJ@rh9?lXDr_CkHUfdN$X7VW{KTFUY{a@B$?Jdb&q1D~RFI
z>H5N>+x3M<=W(!vN9Q4rZr>N(u0K3F&q2lZGs3l9nf!|}oiSx|5|caI<n0{tlW%aS
zFwUC%m*Y3%tj#|;`575&CNpx0Gd6?C&dGt?je;dbiJ2v-xv6<2@x__xd5JlbFLH})
ze$O4r#27m{kx$$(4P-t80|OHS0|UrWIUt8IFff!s#aS2_7(^Ku82<c+fUe0C`NSEg
zOg_jbKAD660pqO6FZs>6HgH3<U0|B5C1A#QYjUE1J>#v(3kB>sA3zOSIr*i4Ib-K!
zML~PUWs?&H?HN~0UMOhK)WA3Sk)R#t0}hA@4wE&7%sCaH=Jij`6f)<U!3U8`WSIPl
GUk(5%lzh_w

-- 
GitLab