diff --git a/tool/net/redbean.c b/tool/net/redbean.c index 8167df430..1003050f3 100644 --- a/tool/net/redbean.c +++ b/tool/net/redbean.c @@ -6922,6 +6922,7 @@ static void Listen(void) { } if (hasonserverlisten && LuaOnServerListen(servers.p[n].fd, ips.p[i], ports.p[j])) { + close(servers.p[n].fd); n--; // skip this server instance continue; } @@ -6949,6 +6950,8 @@ static void Listen(void) { } } } + // shrink allocated memory in case some of the sockets were skipped + if (n < ips.n * ports.n) servers.p = realloc(servers.p, n*sizeof(*servers.p)); servers.n = n; polls = malloc((1 + n) * sizeof(*polls)); polls[0].fd = -1;