1 | "use strict";
|
2 |
|
3 | const net = require('net');
|
4 |
|
5 | const range = require('mout/array/range');
|
6 | const shuffle = require('mout/array/shuffle');
|
7 |
|
8 |
|
9 | function getPort(ports = 1025, maxPort = 65535, host = '127.0.0.1') {
|
10 |
|
11 | if(!Array.isArray(ports))
|
12 | ports = shuffle(range(parseInt(ports), parseInt(maxPort)));
|
13 |
|
14 | let port = ports.shift();
|
15 | if(port === undefined)
|
16 | return Promise.reject(`No available port`);
|
17 |
|
18 | let server = net.createServer();
|
19 |
|
20 | return new Promise((resolve) => {
|
21 | server.once('error', () => resolve(getPort(ports, undefined, host)));
|
22 | server.once('listening', function() {
|
23 | port = server.address().port;
|
24 | server.close(() => resolve(port));
|
25 | });
|
26 | server.listen(port, host);
|
27 | });
|
28 | }
|
29 |
|
30 |
|
31 | module.exports = getPort;
|