commit 120381c93d65a860f38bc5e1541b1c00ff959124 from: Omar Polo date: Fri Nov 06 16:09:30 2020 UTC [debug] print number of connected clients on SIGINFO or SIGUSR2 for poor peoples commit - aff8d1901084bbfd81f4a6335dbed70a02b930fb commit + 120381c93d65a860f38bc5e1541b1c00ff959124 blob - 8ab175cccb88092aec202bd08a62cbbc524e091c blob + f71319a0b3bc474f5b44d04691a64f7bd6814680 --- gmid.c +++ gmid.c @@ -110,7 +110,10 @@ struct etm { /* file extension to mime */ const char *dir; int dirfd, logfd; int cgi; +int connected_clients; +void siginfo_handler(int); + char *url_after_proto(char*); char *url_start_of_request(char*); int url_trim(struct client*, char*); @@ -138,6 +141,12 @@ void loop(struct tls*, int); void usage(const char*); +void +siginfo_handler(int sig) +{ + (void)sig; +} + char * url_after_proto(char *url) { @@ -760,6 +769,7 @@ do_accept(int sock, struct tls *ctx, struct pollfd *fd clients[i].af = AF_INET; clients[i].addr = addr.sin_addr; + connected_clients++; return; } } @@ -784,6 +794,8 @@ goodbye(struct pollfd *pfd, struct client *c) return; } + connected_clients--; + tls_free(c->ctx); c->ctx = NULL; @@ -813,8 +825,13 @@ loop(struct tls *ctx, int sock) fds[0].fd = sock; for (;;) { - if ((todo = poll(fds, MAX_USERS, INFTIM)) == -1) + if ((todo = poll(fds, MAX_USERS, INFTIM)) == -1) { + if (errno == EINTR) { + warnx("connected clients: %d", connected_clients); + continue; + } err(1, "poll"); + } for (i = 0; i < MAX_USERS; i++) { assert(i < MAX_USERS); @@ -865,6 +882,13 @@ main(int argc, char **argv) signal(SIGPIPE, SIG_IGN); signal(SIGCHLD, SIG_IGN); +#ifdef SIGINFO + signal(SIGINFO, siginfo_handler); +#endif + signal(SIGUSR2, siginfo_handler); + + connected_clients = 0; + dir = "docs/"; logfd = 2; /* stderr */ cgi = 0;