Commit Diff


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;