From 73caf309809918730c9f11ee8f573301646fb1b6 Mon Sep 17 00:00:00 2001 From: amankumarsingh77 Date: Sat, 2 May 2026 15:43:52 +0530 Subject: fix(cdp): clear socket timer on probe success; surface non-ENOENT readFile errors --- src/cdp/discovery.ts | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) (limited to 'src') diff --git a/src/cdp/discovery.ts b/src/cdp/discovery.ts index 1b33bee..8b35864 100644 --- a/src/cdp/discovery.ts +++ b/src/cdp/discovery.ts @@ -38,16 +38,17 @@ const profileDirs = (): ReadonlyArray => { const probePort = (port: number): Promise> => new Promise((resolve) => { const sock = netConnect({ host: "127.0.0.1", port }); + let settled = false; const finish = (r: Result): void => { + if (settled) return; + settled = true; + sock.setTimeout(0); sock.destroy(); resolve(r); }; sock.setTimeout(1000, () => finish(err(cdpError("discovery_failed", "probe timeout")))); sock.once("error", (e) => finish(err(cdpError("discovery_failed", e.message)))); - sock.once("connect", () => { - sock.end(); - resolve(ok(undefined)); - }); + sock.once("connect", () => finish(ok(undefined))); }); const waitForPort = async (port: number): Promise> => { @@ -72,8 +73,11 @@ export const discoverWsUrl = async (): Promise> => { let raw: string; try { raw = await readFile(portFile, "utf8"); - } catch { - continue; + } catch (e) { + // Node fs errors carry .code; see ErrnoException + const code = (e as NodeJS.ErrnoException).code; + if (code === "ENOENT" || code === undefined) continue; + return err(cdpError("discovery_failed", `failed to read ${portFile}: ${e instanceof Error ? e.message : String(e)}`)); } const lines = raw.trim().split("\n"); if (lines.length < 2) continue; -- cgit v1.2.3