55 lines
1.0 KiB
JavaScript
55 lines
1.0 KiB
JavaScript
'use strict';
|
|
|
|
function bindTcpAndRelease(port, cb) {
|
|
var server = require('net').createServer();
|
|
server.on('error', function (e) {
|
|
cb(e);
|
|
});
|
|
server.listen(port, function () {
|
|
server.close();
|
|
cb();
|
|
});
|
|
}
|
|
|
|
function checkTcpPorts(cb) {
|
|
var bound = {};
|
|
var failed = {};
|
|
|
|
bindTcpAndRelease(80, function (e) {
|
|
if (e) {
|
|
failed[80] = e;
|
|
//console.log(e.code);
|
|
//console.log(e.message);
|
|
} else {
|
|
bound['80'] = true;
|
|
}
|
|
|
|
bindTcpAndRelease(443, function (e) {
|
|
if (e) {
|
|
failed[443] = e;
|
|
} else {
|
|
bound['443'] = true;
|
|
}
|
|
|
|
if (bound['80'] && bound['443']) {
|
|
cb(null, bound);
|
|
return;
|
|
}
|
|
|
|
console.warn("default ports 80 and 443 are not available, trying 8443");
|
|
|
|
bindTcpAndRelease(8443, function (e) {
|
|
if (e) {
|
|
failed[8443] = e;
|
|
} else {
|
|
bound['8443'] = true;
|
|
}
|
|
|
|
cb(failed, bound);
|
|
});
|
|
});
|
|
});
|
|
}
|
|
|
|
module.exports.checkTcpPorts = checkTcpPorts;
|