From 6db24d8ab62752a16835dd991bb9a3c2f705370d Mon Sep 17 00:00:00 2001 From: Nate Choe Date: Sat, 2 Jul 2022 08:17:15 -0500 Subject: [PATCH] Increased resilience and added some more logging --- site/sitefile | 4 ++-- src/main.c | 8 +++++--- src/runner.c | 4 ++-- src/swebs/util.h | 1 + src/util.c | 17 +++++++++++++++++ 5 files changed, 27 insertions(+), 7 deletions(-) diff --git a/site/sitefile b/site/sitefile index 8a73adb..137d2b3 100644 --- a/site/sitefile +++ b/site/sitefile @@ -6,8 +6,8 @@ key domain.key 8001 cert domain.crt 8001 # Port 8001 can have TLS, but it's self signed and very bad. -timeout 2000 8000 -timeout 2000 8001 +timeout 200000 8000 +timeout 200000 8001 # Set these values for the ports set port 8000 diff --git a/src/main.c b/src/main.c index 354ec8c..b6aaa08 100644 --- a/src/main.c +++ b/src/main.c @@ -107,6 +107,7 @@ static void createProcess(int id) { for (i = 0; i < sizeof(signals) / sizeof(signals[0]); i++) unsetsignal(signals[i]); unsetsignal(SIGCHLD); + setsignal(SIGPIPE, SIG_IGN); connfd = socket(AF_UNIX, SOCK_STREAM, 0); if (connfd < 0) { @@ -125,9 +126,10 @@ static void createProcess(int id) { static void remakeChild(int signal) { pid_t pid; - int i; - pid = wait(NULL); - createLog("A child has died, recreating"); + int i, status; + pid = wait(&status); + createFormatLog("A child has died, recreating: %s", + strsignal(WTERMSIG(status))); for (i = 0; i < processes - 1; i++) { if (runners[i].pid == pid) { close(runners[i].fd); diff --git a/src/runner.c b/src/runner.c index 2011eae..8fe0c42 100644 --- a/src/runner.c +++ b/src/runner.c @@ -117,8 +117,8 @@ remove: int portind; newfd = recvFd(connfd); if (newfd < 0) { - createLog("Message received that included an invalid fd"); - continue; + createLog("Message received that included an invalid fd, quitting"); + exit(EXIT_FAILURE); } while (conninfo->valid == 0) ; portind = conninfo->portind; diff --git a/src/swebs/util.h b/src/swebs/util.h index 8622910..ea1f9ce 100644 --- a/src/swebs/util.h +++ b/src/swebs/util.h @@ -36,6 +36,7 @@ char *xstrdup(char *str); int createLog(char *msg); int createErrorLog(char *msg, int err); +int createFormatLog(char *fmt, ...); int istrcmp(char *s1, char *s2); /* case insensitive strcmp */ RequestType getType(char *str); diff --git a/src/util.c b/src/util.c index dfadf0e..62bcf94 100644 --- a/src/util.c +++ b/src/util.c @@ -20,6 +20,7 @@ #include #include #include +#include #include #include @@ -125,6 +126,22 @@ int createErrorLog(char *msg, int err) { return 0; } +int createFormatLog(char *fmt, ...) { + va_list ap; + char *log; + int code; + va_start(ap, fmt); + log = malloc(vsnprintf(NULL, 0, fmt, ap) + 1); + va_end(ap); + if (log == NULL) + return 1; + va_start(ap, fmt); + vsprintf(log, fmt, ap); + va_end(ap); + code = createLog(log); + return code; +} + int istrcmp(char *s1, char *s2) { int i; for (i = 0;; i++) {