X-Git-Url: http://dolda2000.com/gitweb/?p=statserve.git;a=blobdiff_plain;f=statserve.c;h=9bee73b2c7dd62a86f35d497cfbfa09e453464f2;hp=ab3b3467bc0db6aba64b4207a20a4b116c0633e2;hb=a823d5b4a231f42a598ac3624f9271a2a3b29a50;hpb=e9b9b1bc0c0dad06b9a9c646adfecdf13247a7c1 diff --git a/statserve.c b/statserve.c index ab3b346..9bee73b 100644 --- a/statserve.c +++ b/statserve.c @@ -3,6 +3,7 @@ #include #include #include +#include #include #include #include @@ -84,6 +85,21 @@ static void listenloop(struct muth *muth, va_list args) } } +static void sigterm(int sig) +{ + shutdown(0, SHUT_RDWR); +} + +static void closeall(void) +{ + struct source *src; + + for(src = sources; src != NULL; src = src->next) { + if(src->close) + src->close(src); + } +} + int main(int argc, char **argv) { int c; @@ -104,7 +120,10 @@ int main(int argc, char **argv) } last = NULL; while(optind < argc) { - src = parsesource(argv[optind++]); + if((src = parsesource(argv[optind++])) == NULL) { + closeall(); + return(1); + } if(!sources) sources = src; if(last) @@ -113,9 +132,13 @@ int main(int argc, char **argv) } if(!sources) { usage(stderr); + closeall(); return(1); } mustart(listenloop, 0); + signal(SIGINT, sigterm); + signal(SIGTERM, sigterm); ioloop(); + closeall(); return(0); }