mirror of
https://github.com/Pandipipas/scoreko-electron-dev.git
synced 2026-06-06 05:32:06 +00:00
fix(nodecg): avoid intrusive port probe that can break startup on Windows (#26)
This commit is contained in:
@@ -248,16 +248,36 @@ function hasReadWriteAccess(candidatePath: string): boolean {
|
|||||||
|
|
||||||
function probePortAvailable(port: number): Promise<boolean> {
|
function probePortAvailable(port: number): Promise<boolean> {
|
||||||
return new Promise((resolve) => {
|
return new Promise((resolve) => {
|
||||||
const server = net.createServer();
|
const socket = net.createConnection({ host: "127.0.0.1", port });
|
||||||
|
let resolved = false;
|
||||||
|
|
||||||
server.once("error", () => {
|
const complete = (isAvailable: boolean): void => {
|
||||||
resolve(false);
|
if (resolved) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
resolved = true;
|
||||||
|
socket.destroy();
|
||||||
|
resolve(isAvailable);
|
||||||
|
};
|
||||||
|
|
||||||
|
socket.setTimeout(1000);
|
||||||
|
|
||||||
|
socket.once("connect", () => {
|
||||||
|
complete(false);
|
||||||
});
|
});
|
||||||
|
|
||||||
server.listen(port, "127.0.0.1", () => {
|
socket.once("timeout", () => {
|
||||||
server.close(() => {
|
complete(true);
|
||||||
resolve(true);
|
});
|
||||||
});
|
|
||||||
|
socket.once("error", (error: NodeJS.ErrnoException) => {
|
||||||
|
if (error.code === "ECONNREFUSED" || error.code === "EHOSTUNREACH") {
|
||||||
|
complete(true);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
complete(false);
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user