Commit Diff


commit - 709d6e5ead07ce64dd6625eef05deaedadd8f095
commit + 33756bd2353b645a2c046a0807103c309d6d7215
blob - 995b54d11ce59f761349f1a379749539d3c573d3
blob + a36853f7fa086a398c3df98f865536ccd4b0e706
--- ChangeLog
+++ ChangeLog
@@ -1,6 +1,7 @@
 2021-01-10  Omar Polo  <op@omarpolo.com>
 
 	* gmid.c (logs): log also the port of the client
+	(loop): accept both ipv4 and ipv6
 
 2020-12-26  Omar Polo  <op@omarpolo.com>
 
blob - df6c9a70377a6ba209a5682de0ae0be7f490337f
blob + e858c7b34fd054f3efd92755a6f5bd61b94a186a
--- gmid.c
+++ gmid.c
@@ -771,7 +771,7 @@ goodbye(struct pollfd *pfd, struct client *c)
 }
 
 void
-loop(struct tls *ctx, int sock)
+loop(struct tls *ctx, int sock4, int sock6)
 {
 	int i;
 	struct client clients[MAX_USERS];
@@ -783,7 +783,8 @@ loop(struct tls *ctx, int sock)
 		bzero(&clients[i], sizeof(struct client));
 	}
 
-	fds[0].fd = sock;
+	fds[0].fd = sock4;
+	fds[1].fd = sock6;
 
 	for (;;) {
 		if (poll(fds, MAX_USERS, INFTIM) == -1) {
@@ -810,14 +811,14 @@ loop(struct tls *ctx, int sock)
 					goodbye(&fds[i], &clients[i]);
 					continue;
 				}
-			}
-
-			if (i == 0) { /* new client */
-				do_accept(sock, ctx, fds, clients);
-				continue;
 			}
 
-			handle(&fds[i], &clients[i]);
+			if (fds[i].fd == sock4)
+				do_accept(sock4, ctx, fds, clients);
+			else if (fds[i].fd == sock6)
+				do_accept(sock6, ctx, fds, clients);
+			else
+				handle(&fds[i], &clients[i]);
 		}
 	}
 }
@@ -852,7 +853,7 @@ main(int argc, char **argv)
 	const char *cert = "cert.pem", *key = "key.pem";
 	struct tls *ctx = NULL;
 	struct tls_config *conf;
-	int sock, ch;
+	int sock4, sock6, ch;
 	connected_clients = 0;
 
 	if ((dir = absolutify_path("docs")) == NULL)
@@ -944,7 +945,8 @@ main(int argc, char **argv)
 	if (tls_configure(ctx, conf) == -1)
 		errx(1, "tls_configure: %s", tls_error(ctx));
 
-	sock = make_socket(port, AF_INET);
+	sock4 = make_socket(port, AF_INET);
+	sock6 = make_socket(port, AF_INET6);
 
 	if ((dirfd = open(dir, O_RDONLY | O_DIRECTORY)) == -1)
 		err(1, "open: %s", dir);
@@ -962,9 +964,10 @@ main(int argc, char **argv)
 	if (cgi == NULL && pledge("stdio rpath inet", NULL) == -1)
 		err(1, "pledge");
 
-	loop(ctx, sock);
+	loop(ctx, sock4, sock6);
 
-	close(sock);
+	close(sock4);
+	close(sock6);
 	tls_free(ctx);
 	tls_config_free(conf);
 }
blob - 0df59ed5b33978a62a13e25df7356f3505d5a858
blob + cb6af60776fbb003d5ba2cbd10d6ae1c5efc73db
--- gmid.h
+++ gmid.h
@@ -115,7 +115,7 @@ void		 mark_nonblock(int);
 int		 make_soket(int);
 void		 do_accept(int, struct tls*, struct pollfd*, struct client*);
 void		 goodbye(struct pollfd*, struct client*);
-void		 loop(struct tls*, int);
+void		 loop(struct tls*, int, int);
 
 void		 usage(const char*);