answerver
Version:
incremental server port listener function
41 lines (35 loc) • 783 B
JavaScript
var net = require('net')
module.exports = listen
function listen(server, _port, cb){
isPortTaken(_port, answer)
function answer(err, b){
if(!b) {
server.listen(_port)
server.on('listening', function(){
cb(null, _port)
//console.log('listening on port ' + _port)
});
}
else {
port = _port
isPortTaken(++_port, answer)
}
}
}
function isPortTaken(PORT, callback) {
var tester = net.createServer()
tester.once('error', function (err) {
if (err.code == 'EADDRINUSE') {
callback(null, true)
} else {
callback(err)
}
})
tester.once('listening', function() {
tester.once('close', function() {
callback(null, false)
})
tester.close()
})
tester.listen(PORT)
}