summaryrefslogtreecommitdiff
path: root/app/v3_c/src/myhttpd.c
diff options
context:
space:
mode:
Diffstat (limited to 'app/v3_c/src/myhttpd.c')
-rw-r--r--app/v3_c/src/myhttpd.c118
1 files changed, 0 insertions, 118 deletions
diff --git a/app/v3_c/src/myhttpd.c b/app/v3_c/src/myhttpd.c
deleted file mode 100644
index 9d77949..0000000
--- a/app/v3_c/src/myhttpd.c
+++ /dev/null
@@ -1,118 +0,0 @@
-#include <sys/types.h>
-#include <sys/socket.h>
-#include <netinet/in.h>
-#include <arpa/inet.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <strings.h>
-#include <errno.h>
-#include <unistd.h>
-#include <signal.h>
-
-#include "myhttpd.h"
-#include "process.h"
-#include "utils.h"
-
-int end=0;
-
-void signals(int signum) {
- static int force=0;
-
- if (0) printf("signal %i\n");
-
- if(!force) {
- end=1;
- force=1;
- logs("Tentative d'arrêt soft du serveur...");
- } else {
- logs("Arrêt d'urgence du serveur");
- exit(1);
- }
-}
-
-
-int main() {
- int res;
- int sockServ, sockCli;
- struct sockaddr_in servAddr, cliAddr;
- socklen_t cliAddrLen;
-
- // Création socket
- sockServ = socket(AF_INET, SOCK_STREAM, 0);
- if (sockServ < 0) { perror("socket"); return(2); }
-
- // Accrochage du socket (adresse et port locaux)
- bzero((char *) &servAddr, sizeof(servAddr));
- servAddr.sin_family = AF_INET;
- servAddr.sin_addr.s_addr = INADDR_ANY;
- servAddr.sin_port = htons(LISTEN_PORT);
- res=bind(sockServ, (struct sockaddr *) &servAddr, sizeof(servAddr));
- if (res < 0) { perror("bind"); return(3); }
-
- // On lance l'écoute
- listen(sockServ,LISTEN_BACKLOG);
- if (res < 0) { perror("listen"); return(4); }
-
- // On active la gestion des signaux
- signal(2,signals);
-
- res=initProcess();
- if (res != 0 ) {
-#ifdef DEBUG
- logs("initProcess() error");
-#endif
- return(5);
- }
-
- // Boucle d'acceptation des clients
- cliAddrLen = sizeof(cliAddr);
- while ( ! end ) {
- // Appel bloquant d'acceptation d'un nouveau client
- sockCli=accept(sockServ, (struct sockaddr *) &cliAddr, &cliAddrLen);
-
- // Il y plein de raisons pour qu'un accept echoue
- if (sockCli < 0) {
- switch(errno) {
- case EAGAIN:
- case EINTR:
- // Cas qui ne sont pas des erreurs, mais nécessitent de rappeler accept
-#ifdef DEBUG
- perror("accept (info)");
-#endif
- break;
- case EMFILE:
- case ENFILE:
- case ENOBUFS:
- case ENOMEM:
- // Cas d'erreur transitoire (attente d'une seconde histoire d'attendre un peu si ressources fichiers, ram épuisés
-#ifdef DEBUG
- perror("accept (warn)");
- sleep(1);
-#endif
- break;
- default:
- // Cas d'erreur fatales
- perror("accept (err)");
- end=2;
- }
- } else {
- // Cas nominal : un nouveau socket est disponible avec un client au bout
-#ifdef HEAVYDEBUG
- logs("Client accepté");
-#endif
- end=requestProcess(sockCli, &cliAddr, &cliAddrLen);
- }
- }
-
- freeProcess();
-
- if ( end != 1 ) {
-#ifdef DEBUG
- logs("Fin anormale du serveur");
-#endif
- return(6);
- }
-
- return 0;
-}
-