UNPKG

748 BJavaScriptView Raw
1"use strict";
2
3const net = require('net');
4
5const range = require('mout/array/range');
6const shuffle = require('mout/array/shuffle');
7
8
9function 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
31module.exports = getPort;