import net from 'node:net'; export function probeTcp(monitor) { const started = Date.now(); const timeoutMs = (monitor.timeout ?? 10) * 1000; return new Promise((resolve) => { const socket = net.createConnection({ host: monitor.host, port: monitor.port }); const finish = (status, detail) => { socket.destroy(); resolve({ status, latency: Date.now() - started, code: null, detail }); }; socket.setTimeout(timeoutMs, () => finish('down', 'TCP 连接超时')); socket.once('error', (err) => finish('down', err.code === 'ECONNREFUSED' ? '连接被拒绝(端口关闭)' : (err.code || err.message)) ); socket.once('connect', () => finish('up', '端口可连接')); }); }