summary refs log tree commit diff
path: root/bouncer.c
diff options
context:
space:
mode:
Diffstat (limited to 'bouncer.c')
-rw-r--r--bouncer.c25
1 files changed, 17 insertions, 8 deletions
diff --git a/bouncer.c b/bouncer.c
index 3bf44cd..0d1d551 100644
--- a/bouncer.c
+++ b/bouncer.c
@@ -29,7 +29,8 @@
 static char *censor(char *arg) {
 	char *dup = strdup(arg);
 	if (!dup) err(EX_OSERR, "strdup");
-	memset(arg, '*', strlen(dup));
+	memset(arg, '\0', strlen(dup));
+	arg[0] = '*';
 	return dup;
 }
 
@@ -84,16 +85,24 @@ int main(int argc, char *argv[]) {
 	if (!user) user = nick;
 	if (!real) real = nick;
 
-	enum { PollCap = 64 };
-	struct pollfd fds[PollCap];
-
 	listenConfig(certPath, privPath);
-	size_t binds = listenBind(fds, PollCap, localHost, localPort);
 
-	while (0 < poll(fds, binds, -1)) {
-		for (size_t i = 0; i < binds; ++i) {
+	enum { BindCap = 8 };
+	int bind[BindCap];
+	size_t bindLen = listenBind(bind, BindCap, localHost, localPort);
+
+	// Wishing for struct-of-arrays...
+	struct pollfd fds[BindCap];
+	for (size_t i = 0; i < bindLen; ++i) {
+		fds[i].fd = bind[i];
+		fds[i].events = POLLIN;
+	}
+
+	while (0 < poll(fds, bindLen, -1)) {
+		for (size_t i = 0; i < bindLen; ++i) {
 			if (!fds[i].revents) continue;
-			struct tls *client = listenAccept(&fds[binds], fds[i].fd);
+			struct tls *client;
+			int fd = listenAccept(&client, fds[i].fd);
 		}
 	}
 }