snac2

Fork of https://codeberg.org/grunfink/snac2
git clone https://git.inz.fi/snac2
Log | Files | Refs | README | LICENSE

commit 80d1700f6a82707a4b5ffdce2fa8b1ec7d118f65
parent aabdbe1deef21bde913a63738fd5020b7ee35df0
Author: default <nobody@localhost>
Date:   Thu, 29 Sep 2022 12:50:50 +0200

Added some signal control.

Diffstat:
Mhttpd.c | 26++++++++++++++++++++++++--
1 file changed, 24 insertions(+), 2 deletions(-)

diff --git a/httpd.c b/httpd.c @@ -10,6 +10,8 @@ #include "snac.h" +#include <setjmp.h> + /* susie.png */ const char *susie = "iVBORw0KGgoAAAANSUhEUgAAAEAAAABAAQAAAAC" @@ -188,6 +190,15 @@ void httpd_connection(int rs) } +static jmp_buf on_break; + + +void term_handler(int s) +{ + longjmp(on_break, 1); +} + + void httpd(void) /* starts the server */ { @@ -205,11 +216,22 @@ void httpd(void) srv_running = 1; + signal(SIGPIPE, SIG_IGN); + signal(SIGTERM, term_handler); + signal(SIGINT, term_handler); + srv_log(xs_fmt("httpd start %s:%d", address, port)); - for (;;) { - httpd_connection(rs); + if (setjmp(on_break) == 0) { + for (;;) { + httpd_connection(rs); + } } + srv_running = 0; + + /* wait for the helper thread to end */ + /* ... */ + srv_log(xs_fmt("httpd stop %s:%d", address, port)); }