commit - 709d6e5ead07ce64dd6625eef05deaedadd8f095
commit + 33756bd2353b645a2c046a0807103c309d6d7215
blob - 995b54d11ce59f761349f1a379749539d3c573d3
blob + a36853f7fa086a398c3df98f865536ccd4b0e706
--- ChangeLog
+++ ChangeLog
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
}
void
-loop(struct tls *ctx, int sock)
+loop(struct tls *ctx, int sock4, int sock6)
{
int i;
struct client clients[MAX_USERS];
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) {
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]);
}
}
}
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)
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);
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
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*);