1 | 'use strict'
|
2 |
|
3 | const { createServer } = require('net')
|
4 |
|
5 | function getPort (port = 3000, host = '127.0.0.1') {
|
6 | const server = createServer()
|
7 | return new Promise((resolve, reject) => {
|
8 | server.on('error', (err) => {
|
9 | if (err.code === 'EADDRINUSE' || err.code === 'EACCES') {
|
10 | server.listen(0, host)
|
11 | } else {
|
12 | reject(err)
|
13 | }
|
14 | })
|
15 | server.on('listening', () => {
|
16 | const { port } = server.address()
|
17 | server.close(() => resolve(port))
|
18 | })
|
19 | server.listen(port, host)
|
20 | })
|
21 | }
|
22 |
|
23 | module.exports = getPort
|