From 1f7b05e703ad8320ae00e3a0e39a78ddbb9339aa Mon Sep 17 00:00:00 2001 From: Pandipipas <62224708+Pandipipas@users.noreply.github.com> Date: Mon, 23 Feb 2026 22:16:31 +0100 Subject: [PATCH] fix(nodecg): avoid intrusive port probe that can break startup on Windows (#26) --- src/main/nodecg/process-manager.ts | 34 ++++++++++++++++++++++++------ 1 file changed, 27 insertions(+), 7 deletions(-) diff --git a/src/main/nodecg/process-manager.ts b/src/main/nodecg/process-manager.ts index 7663a19..b463fbe 100644 --- a/src/main/nodecg/process-manager.ts +++ b/src/main/nodecg/process-manager.ts @@ -248,16 +248,36 @@ function hasReadWriteAccess(candidatePath: string): boolean { function probePortAvailable(port: number): Promise { return new Promise((resolve) => { - const server = net.createServer(); + const socket = net.createConnection({ host: "127.0.0.1", port }); + let resolved = false; - server.once("error", () => { - resolve(false); + const complete = (isAvailable: boolean): void => { + if (resolved) { + return; + } + + resolved = true; + socket.destroy(); + resolve(isAvailable); + }; + + socket.setTimeout(1000); + + socket.once("connect", () => { + complete(false); }); - server.listen(port, "127.0.0.1", () => { - server.close(() => { - resolve(true); - }); + socket.once("timeout", () => { + complete(true); + }); + + socket.once("error", (error: NodeJS.ErrnoException) => { + if (error.code === "ECONNREFUSED" || error.code === "EHOSTUNREACH") { + complete(true); + return; + } + + complete(false); }); }); }