diff options
Diffstat (limited to 'serve.c')
-rw-r--r-- | serve.c | 16 |
1 files changed, 14 insertions, 2 deletions
@@ -9,10 +9,13 @@ * `doc/examples/logging.c' in libmicrohttpd source tree. */ +#define _POSIX_C_SOURCE 199506L /* sigwait() */ + #include <stdio.h> #include <stdlib.h> #include <string.h> #include <errno.h> +#include <signal.h> #include <sys/types.h> #include <sys/select.h> @@ -160,10 +163,12 @@ static int answer(void *data, int getchar(void); -int serve_scriptbase(struct scriptbase *base) +int serve_scriptbase(struct scriptbase *base, bool wait_for_sigterm) { int i; struct MHD_Daemon *daemon; + sigset_t sigterm_set; + int signal_number; /* only written, not read */ int retval = -1; if (init_url_lookup_regex()) @@ -185,7 +190,14 @@ int serve_scriptbase(struct scriptbase *base) if (!daemon) goto free_resources; - getchar(); + if (wait_for_sigterm) { + sigemptyset(&sigterm_set); + sigaddset(&sigterm_set, SIGTERM); + sigwait(&sigterm_set, &signal_number); + } else { + getchar(); + } + MHD_stop_daemon(daemon); retval = 0; |