diff options
author | June McEnroe <june@causal.agency> | 2019-10-25 16:27:24 -0400 |
---|---|---|
committer | June McEnroe <june@causal.agency> | 2019-10-25 16:27:24 -0400 |
commit | ffbf1635f5be94eda4ee857d51a51a1564235f5d (patch) | |
tree | f1e5cfd2feee4af202a3d2c40c8d0e0014c9bc9b | |
parent | Use produce/consume words for ring buffer (diff) | |
download | pounce-ffbf1635f5be94eda4ee857d51a51a1564235f5d.tar.gz pounce-ffbf1635f5be94eda4ee857d51a51a1564235f5d.zip |
Clean up listen API
Diffstat (limited to '')
-rw-r--r-- | bounce.c | 4 | ||||
-rw-r--r-- | bounce.h | 2 | ||||
-rw-r--r-- | listen.c | 15 |
3 files changed, 11 insertions, 10 deletions
diff --git a/bounce.c b/bounce.c index 1907584..ad346a0 100644 --- a/bounce.c +++ b/bounce.c @@ -137,8 +137,8 @@ int main(int argc, char *argv[]) { for (size_t i = 0; i < event.len; ++i) { if (!event.fds[i].revents) continue; if (i < binds) { - struct tls *tls; - int fd = listenAccept(&tls, event.fds[i].fd); + int fd; + struct tls *tls = listenAccept(&fd, event.fds[i].fd); eventAdd(fd, clientAlloc(tls)); continue; } diff --git a/bounce.h b/bounce.h index 3c95f70..3307bac 100644 --- a/bounce.h +++ b/bounce.h @@ -60,7 +60,7 @@ const char *ringConsume(time_t *time, size_t consumer); void listenConfig(const char *cert, const char *priv); size_t listenBind(int fds[], size_t cap, const char *host, const char *port); -int listenAccept(struct tls **client, int fd); +struct tls *listenAccept(int *fd, int bind); int serverConnect(const char *host, const char *port); void serverLogin( diff --git a/listen.c b/listen.c index 1179a8b..d6e561f 100644 --- a/listen.c +++ b/listen.c @@ -27,6 +27,7 @@ static struct tls *server; +// TODO: Make this callable more than once to reload certificates? void listenConfig(const char *cert, const char *priv) { struct tls_config *config = tls_config_new(); if (!config) errx(EX_SOFTWARE, "tls_config_new"); @@ -77,16 +78,16 @@ size_t listenBind(int fds[], size_t cap, const char *host, const char *port) { return len; } -int listenAccept(struct tls **client, int fd) { - int sock = accept(fd, NULL, NULL); - if (sock < 0) err(EX_IOERR, "accept"); +struct tls *listenAccept(int *fd, int bind) { + *fd = accept(bind, NULL, NULL); + if (*fd < 0) err(EX_IOERR, "accept"); int yes = 1; - int error = setsockopt(sock, SOL_SOCKET, SO_NOSIGPIPE, &yes, sizeof(yes)); + int error = setsockopt(*fd, SOL_SOCKET, SO_NOSIGPIPE, &yes, sizeof(yes)); if (error) err(EX_OSERR, "setsockopt"); - error = tls_accept_socket(server, client, sock); + struct tls *client; + error = tls_accept_socket(server, &client, *fd); if (error) errx(EX_SOFTWARE, "tls_accept_socket: %s", tls_error(server)); - - return sock; + return client; } |