aboutsummaryrefslogtreecommitdiff
path: root/serve.c
diff options
context:
space:
mode:
Diffstat (limited to 'serve.c')
-rw-r--r--serve.c16
1 files changed, 14 insertions, 2 deletions
diff --git a/serve.c b/serve.c
index dd61da1..8ef0ce3 100644
--- a/serve.c
+++ b/serve.c
@@ -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;