diff options
author | Wojtek Kosior <koszko@koszko.org> | 2021-07-22 14:42:58 +0200 |
---|---|---|
committer | Wojtek Kosior <koszko@koszko.org> | 2021-07-22 14:42:58 +0200 |
commit | b6ace6eda12140c29ee58ec9178b9212b21fa538 (patch) | |
tree | 61f278c90c4d96e9fe686230442d7993b1949890 /serve.c | |
parent | 91d4ce9f14668a5a04b51158b1921e83d51ba9a0 (diff) | |
download | hydrilla-b6ace6eda12140c29ee58ec9178b9212b21fa538.tar.gz hydrilla-b6ace6eda12140c29ee58ec9178b9212b21fa538.zip |
add option to wait for termination by SIGTERM instead of by stdin input
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; |