Skip to content

Instantly share code, notes, and snippets.

@kei0425
Last active November 9, 2016 08:32
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save kei0425/53fa12e5c95bf476ea1aed82c38e75a2 to your computer and use it in GitHub Desktop.
Save kei0425/53fa12e5c95bf476ea1aed82c38e75a2 to your computer and use it in GitHub Desktop.
const net = require('net');
function searchport(host, port, retry_count, callback) {
if (retry_count == null) {
retry_count = 100;
}
var socket = new net.Socket();
return new Promise(
function (resolve, reject) {
socket.on(
'error',
function (e) {
resolve(port);
if (callback) {
callback(null, port);
}
}
);
socket.connect(
port,
host,
function () {
socket.destroy();
reject('no free port');
}
);
}
).catch(
function (err) {
if (retry_count > 1) {
return searchport(host, port + 1, retry_count - 1, callback);
}
else {
if (callback) {
callback(err, null);
}
else {
throw err;
}
}
}
);
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment