41 lines
1.0 KiB
JavaScript
41 lines
1.0 KiB
JavaScript
import net from "node:net";
|
|
|
|
const [host, portStr, timeoutStr] = process.argv.slice(2);
|
|
const port = Number.parseInt(portStr ?? "", 10);
|
|
const timeoutMs = Number.parseInt(timeoutStr ?? "30000", 10);
|
|
|
|
if (!host || Number.isNaN(port)) {
|
|
console.error("Usage: node wait-for-port.mjs <host> <port> [timeoutMs]");
|
|
process.exit(1);
|
|
}
|
|
|
|
const start = Date.now();
|
|
|
|
function tryConnect() {
|
|
const socket = new net.Socket();
|
|
socket.setTimeout(1000);
|
|
socket.once("connect", () => {
|
|
socket.destroy();
|
|
process.exit(0);
|
|
});
|
|
socket.once("error", () => {
|
|
socket.destroy();
|
|
if (Date.now() - start > timeoutMs) {
|
|
console.error(`Timed out waiting for ${host}:${port}`);
|
|
process.exit(1);
|
|
}
|
|
setTimeout(tryConnect, 500);
|
|
});
|
|
socket.once("timeout", () => {
|
|
socket.destroy();
|
|
if (Date.now() - start > timeoutMs) {
|
|
console.error(`Timed out waiting for ${host}:${port}`);
|
|
process.exit(1);
|
|
}
|
|
setTimeout(tryConnect, 500);
|
|
});
|
|
socket.connect(port, host);
|
|
}
|
|
|
|
tryConnect();
|