index.js
769 Bytes
const net = require('net');
function checkPortUsable(port) {
return new Promise((resolve, reject) => {
const server = net.createConnection({ port });
server.on('connect', () => {
server.end();
reject(`Port ${port} is not available!`);
});
server.on('error', () => {
resolve(port);
});
});
}
function randomNumByRange(min, max) {
return Math.floor(Math.random() * (max - min + 1)) + min;
}
function findUsablePort(port, minPort = 10000, maxPort = 65536) {
const retry = () => {
const port = randomNumByRange(minPort, maxPort);
return findUsablePort(port, minPort, maxPort);
};
return checkPortUsable(port)
.then(() => port)
.catch(retry);
}
module.exports = {
findUsablePort,
checkPortUsable,
};