diff --git a/Makefile b/Makefile index b978a24..ad66daa 100644 --- a/Makefile +++ b/Makefile @@ -100,13 +100,39 @@ print-%: ; @echo $* = $($*) # -TESTS------------------------------------------------------------------------ test1: all - @echo "[threadpool]\n\nquantity = 1\npending = 10\n\n[files]\n\nMaxFiles = 10000\nMaxSize = 128000000\n\n[log]\n\nlogFile = ./logs/l.log\n\n[socket]\n\nname = ./socket\nbacklog = 100\n" > build/confix.txt - valgrind --leak-check=full --track-origins=yes $(BUILD_DIR)/server & + @echo "[threadpool]" > $(BUILD_DIR)/config.txt + @echo "quantity = 1" >> $(BUILD_DIR)/config.txt + @echo "pending = 10" >> $(BUILD_DIR)/config.txt + @echo "" >> $(BUILD_DIR)/config.txt + @echo "[files]" >> $(BUILD_DIR)/config.txt + @echo "MaxSize = 128000000" >> $(BUILD_DIR)/config.txt + @echo "MaxFiles = 10000" >> $(BUILD_DIR)/config.txt + @echo "" >> $(BUILD_DIR)/config.txt + @echo "[log]" >> $(BUILD_DIR)/config.txt + @echo "logFile = ./logs/l.log" >> $(BUILD_DIR)/config.txt + @echo "" >> $(BUILD_DIR)/config.txt + @echo "[socket]" >> $(BUILD_DIR)/config.txt + @echo "name = ./socket" >> $(BUILD_DIR)/config.txt + @echo "backlog = 100" >> $(BUILD_DIR)/config.txt + valgrind --leak-check=full --track-origins=yes $(BUILD_DIR)/server $(BUILD_DIR)/config.txt & bash scripts/test1.sh - pkill -1 memcheck-amd64 + pkill --signal SIGHUP memcheck test2: all - @echo "[threadpool]\n\nquantity = 4\npending = 100\n\n[files]\n\nMaxFiles = 10\nMaxSize = 1000\n\n[log]\n\nlogFile = ./logs/l.log\n\n[socket]\n\nname = ./socket\nbacklog = 100\n" > build/confix.txt - $(BUILD_DIR)/server & + @echo "[threadpool]" > $(BUILD_DIR)/config.txt + @echo "quantity = 4" >> $(BUILD_DIR)/config.txt + @echo "pending = 100" >> $(BUILD_DIR)/config.txt + @echo "" >> $(BUILD_DIR)/config.txt + @echo "[files]" >> $(BUILD_DIR)/config.txt + @echo "MaxSize = 1000" >> $(BUILD_DIR)/config.txt + @echo "MaxFiles = 10" >> $(BUILD_DIR)/config.txt + @echo "" >> $(BUILD_DIR)/config.txt + @echo "[log]" >> $(BUILD_DIR)/config.txt + @echo "logFile = ./logs/l.log" >> $(BUILD_DIR)/config.txt + @echo "" >> $(BUILD_DIR)/config.txt + @echo "[socket]" >> $(BUILD_DIR)/config.txt + @echo "name = ./socket" >> $(BUILD_DIR)/config.txt + @echo "backlog = 100" >> $(BUILD_DIR)/config.txt + $(BUILD_DIR)/server $(BUILD_DIR)/config.txt & bash scripts/test2.sh pkill -1 server diff --git a/scripts/test1.sh b/scripts/test1.sh index 88060c4..3b9d7b7 100644 --- a/scripts/test1.sh +++ b/scripts/test1.sh @@ -1,8 +1,8 @@ #!/bin/sh -./build/client -t 200 -f socket -w testFiles/1 -D Wdir -W testFiles/1/file1 -r testFiles/1/file1 -d Rdir -R n=3 -p +./build/client -t 200 -f socket -w testFiles/1 -D build/Wdir -W testFiles/1/file1 -r testFiles/1/file1 -d build/Rdir -R n=3 -p exit 0 -./client -t 200 -f socket -w testFiles -D Wdir -W testFiles/6/f1 -r testFiles/6/f1 -d Rdir -R n=3 -l testFiles/6/f1 -u testFiles/6/f1 -c testFiles/6/f1 -p +./client -t 200 -f socket -w testFiles -D build/Wdir -W testFiles/6/f1 -r testFiles/6/f1 -d build/Rdir -R n=3 -l testFiles/6/f1 -u testFiles/6/f1 -c testFiles/6/f1 -p exit 0 diff --git a/src/server.c b/src/server.c index a2d3aa5..55a4aa3 100644 --- a/src/server.c +++ b/src/server.c @@ -309,22 +309,32 @@ int main(int argc, char *argv[]) { continue; } if (i == request_pipe[0]) { // un worker ha finito di servire un client - int pdr; // ottengo il descrittore della pipe - if (readn(request_pipe[0], &pdr, sizeof(int)) == -1) { + long pdr; // ottengo il descrittore della pipe + if (readn(request_pipe[0], &pdr, sizeof(long)) == -1) { perror("readn"); free(connfd); break; } - switch (pdr) { case -1: // client disconnected --numberOfConnections; + n = snprintf(buf, sizeof(buf), "Client %ld disconnected.\n", pdr); + if( n<0 ) { + perror("snprintf"); + free(connfd); + goto _cleanup; + } + if( taglia_log(taglia, buf) < 0) { + free(connfd); + goto _cleanup; + } if (stopNewConnections && numberOfConnections <= 0) { quit = 1; // termino il signalThread pthread_cancel(sighandler_thread); break; } + free(connfd); continue; default: // client served but not disconnected FD_SET(pdr, &set); @@ -399,7 +409,6 @@ int main(int argc, char *argv[]) { // aggiungo al threadpool int r = addToThreadPool(pool, threadF, args); if (r == 0) { - numberOfConnections++; free(connfd); continue; // aggiunto con successo } diff --git a/src/serverWorker.c b/src/serverWorker.c index 5a39907..dc103ad 100644 --- a/src/serverWorker.c +++ b/src/serverWorker.c @@ -66,8 +66,11 @@ void threadF(void *arg) { goto _cleanup; } - if (n==0) + if (n==-1) goto _cleanup; + if (n==0) + goto closeConnection; + str.str = calloc(str.len+1, sizeof(char)); if (!str.str) { perror("calloc"); @@ -82,12 +85,13 @@ void threadF(void *arg) { } str.str[str.len] = '\0'; - if(strncmp(str.str, "quit", 5) == 0) { // il client vuole chiudere la connessione +closeConnection: + if(n==0 || strncmp(str.str, "quit", 5) == 0) { // il client vuole chiudere la connessione close(connfd); - int close = -1; + long close = -1; // comunico al manager che ho chiuso la connessione - if (writen(request_pipe, &close, sizeof(int)) == -1) { + if (writen(request_pipe, &close, sizeof(long)) == -1) { perror("writen"); goto _cleanup; } @@ -111,7 +115,7 @@ void threadF(void *arg) { // str.str non è più valido perchè parser fa free // comunico al manager che è stata servita la richiesta - if (writen(request_pipe, &connfd, sizeof(int)) == -1) { + if (writen(request_pipe, &connfd, sizeof(long)) == -1) { perror("writen"); } // log