* 测试 socket 端口是否可用(可以绑定) * @param port 要测试的端口 * @returns 如果端口可用返回 true,否则返回 false
(port: number)
| 107 | * @returns 如果端口可用返回 true,否则返回 false |
| 108 | */ |
| 109 | public async testPort(port: number): Promise<boolean> { |
| 110 | return new Promise<boolean>((resolve) => { |
| 111 | const server = createServer(); |
| 112 | |
| 113 | server.once("error", (error: NodeJS.ErrnoException) => { |
| 114 | // 端口被占用或权限不足 |
| 115 | if (error.code === "EADDRINUSE" || error.code === "EACCES") { |
| 116 | resolve(false); |
| 117 | } else { |
| 118 | resolve(false); |
| 119 | } |
| 120 | }); |
| 121 | |
| 122 | server.once("listening", () => { |
| 123 | // 端口可用,立即关闭测试服务器 |
| 124 | server.close(() => { |
| 125 | resolve(true); |
| 126 | }); |
| 127 | }); |
| 128 | |
| 129 | try { |
| 130 | server.listen(port, "127.0.0.1"); |
| 131 | } catch { |
| 132 | resolve(false); |
| 133 | } |
| 134 | }); |
| 135 | } |
| 136 | |
| 137 | /** |
| 138 | * 尝试自动启动 |
no test coverage detected