Skip to content

Commit

Permalink
refactoring,
Browse files Browse the repository at this point in the history
added isAvailable function,
added examples
  • Loading branch information
danielzzz committed Sep 29, 2010
1 parent 68727b4 commit 0f4e28e
Show file tree
Hide file tree
Showing 2 changed files with 38 additions and 14 deletions.
7 changes: 7 additions & 0 deletions example.js
Expand Up @@ -13,3 +13,10 @@ portchecker.getFirstAvailable(startPort, endPort, host, function(p, host) {
console.log('the first free port found on ' + host + ' between ' + startPort + ' and ' + endPort + ' is ' + p);
}
});


//---- check if the port is open ---------------------------------------------------

//portchecker.isOpen(81, 'localhost', function(isOpen){
// console.log('port 81 on localhost is ' + (isOpen ? 'open' : 'closed'));
//})
45 changes: 31 additions & 14 deletions portchecker.js
Expand Up @@ -14,28 +14,45 @@ var net = require('net');


// start port, last port, host, callback
exports.getFirstAvailable = function (p, m, host, callback) {
exports.getFirstAvailable = function (startPort, endPort, host, callback) {
if (startPort>endPort) {
throw new Error('portchecker: startPort must be lower than endPort');
}
console.log('looking for an available port in ' + startPort + '-' + endPort + ' on ' + host);
var notFree = false;
var currentPort = startPort;

var onCheckPort = function(isOpen){
isOpen && check();
!isOpen && callback((currentPort-1), host);
}

var check = function() {
//---- return -1 if we checked all ports from the range already
currentPort>endPort && callback(-1, host);

console.log('checking :' + currentPort);
exports.isOpen(currentPort, host, onCheckPort);
currentPort++;
}

//----- start checking ----------
check();


}

exports.isOpen = function (p, host, callback) {
var isOpen = false;
var conn = net.createConnection(p, host);
var onClose = function() {
if (notFree) {conn.connect(p); notFree = false; return;}
delete conn;
callback(p, host);
callback(isOpen);
};

var onOpen = function() {
notFree = true;
isOpen = true;
//console.log(host+":"+p+" is taken");

//not found
if (p >= m) {
conn.removeListener('close', onClose);
delete conn;
callback(-1, host);

}

p++;
conn.end();
};

Expand Down

0 comments on commit 0f4e28e

Please sign in to comment.