handle SIGINT and SIGTERM: cleanup on these signals - teed - A multiplex relay tee(1) daemon.
HTML git clone git://bitreich.org/teed git://enlrupgkhuxnvlhsf6lc3fziv5h2hhfrinws65d7roiv6bfj7d652fid.onion/teed
DIR Log
DIR Files
DIR Refs
DIR Tags
DIR README
DIR LICENSE
---
DIR commit 7ea6a417f78562629bd6f579dd593d44a5372acb
DIR parent c9671740957f58aa168262f3e76ad2f72542f05b
HTML Author: Hiltjo Posthuma <hiltjo@codemadness.org>
Date: Mon, 14 Aug 2023 15:09:01 +0200
handle SIGINT and SIGTERM: cleanup on these signals
Signed-off-by: Christoph Lohmann <20h@r-36.net>
Diffstat:
M teed.c | 17 ++++++++++++++++-
1 file changed, 16 insertions(+), 1 deletion(-)
---
DIR diff --git a/teed.c b/teed.c
@@ -14,6 +14,8 @@
#include <sys/stat.h>
#include <sys/select.h>
+volatile sig_atomic_t isrunning = 1;
+
void *
memdup(void *p, int l)
{
@@ -144,9 +146,22 @@ llist_del(llist **l, llist *e)
}
void
+sighandler(int signo)
+{
+ switch (signo) {
+ case SIGINT:
+ case SIGTERM:
+ isrunning = 0;
+ break;
+ }
+}
+
+void
initsignals(void)
{
signal(SIGPIPE, SIG_IGN);
+ signal(SIGINT, sighandler);
+ signal(SIGTERM, sighandler);
}
int
@@ -215,7 +230,7 @@ main(int argc, char *argv[])
timeout.tv_sec = 1;
timeout.tv_nsec = 0;
- for (;;) {
+ for (;isrunning;) {
maxsfd = 0;
FD_ZERO(&fdset);
forllist(lfds, e) {