'use strict' const net = require('net') const NetUtils = { bindAvailablePort (port, listenAddress) { return new Promise((resolve, reject) => { const server = net.createServer() server .on('error', (err) => { server.close() if (err.code === 'EADDRINUSE' || err.code === 'EACCES') { server.listen(++port, listenAddress) } else { reject(new Error(`Failed to bind ${port}: ` + (err.stack || err))) } }) .on('listening', () => { resolve(server) }) .listen(port, listenAddress) }) } } module.exports = NetUtils