From 70668ac5c96e3e27725089a4fbfb079fb99b0826 Mon Sep 17 00:00:00 2001 From: ivinx Date: Mon, 30 Mar 2026 09:55:41 +0900 Subject: [PATCH] stream: fix server stop accepting after uv_accept() error When uv__stream_open() fails inside uv_accept(), the accepted fd is closed but POLLIN is never re-enabled on the server's IO watcher. The condition `if (err == 0)` prevents uv__io_start() from being called on the error path, causing the server to permanently stop accepting new connections. Fix by removing the err == 0 guard so POLLIN is re-enabled unconditionally when no queued fds are present. --- src/unix/stream.c | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/src/unix/stream.c b/src/unix/stream.c index 86a179b35..625226cf2 100644 --- a/src/unix/stream.c +++ b/src/unix/stream.c @@ -547,7 +547,6 @@ int uv_accept(uv_stream_t* server, uv_stream_t* client) { server->accepted_fd, UV_HANDLE_READABLE | UV_HANDLE_WRITABLE); if (err) { - /* TODO handle error */ uv__close(server->accepted_fd); goto done; } @@ -590,8 +589,7 @@ done: } } else { server->accepted_fd = -1; - if (err == 0) - uv__io_start(server->loop, &server->io_watcher, POLLIN); + uv__io_start(server->loop, &server->io_watcher, POLLIN); } return err; }