Skip to content

Commit 1edc1bb

Browse files
committed
fix: should double check 0.0.0.0 and localhost
- closes #17 - closes #19
1 parent 0e852e3 commit 1edc1bb

File tree

2 files changed

+14
-8
lines changed

2 files changed

+14
-8
lines changed

lib/detect-port.js

Lines changed: 13 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -15,17 +15,17 @@ module.exports = (port, callback) => {
1515
}
1616
debug('detect free port between [%s, %s)', port, maxPort);
1717
if (typeof callback === 'function') {
18-
return tryListen(port, maxPort, callback);
18+
return tryListen(port, maxPort, null, callback);
1919
}
2020
// promise
2121
return new Promise(resolve => {
22-
tryListen(port, maxPort, (_, realPort) => {
22+
tryListen(port, maxPort, null, (_, realPort) => {
2323
resolve(realPort);
2424
});
2525
});
2626
};
2727

28-
function tryListen(port, maxPort, callback) {
28+
function tryListen(port, maxPort, hostname, callback) {
2929
const server = new net.Server();
3030

3131
server.on('error', err => {
@@ -41,13 +41,19 @@ function tryListen(port, maxPort, callback) {
4141
maxPort = 0;
4242
}
4343
server.close();
44-
return tryListen(port, maxPort, callback);
44+
return tryListen(port, maxPort, hostname, callback);
4545
});
4646

47-
server.listen({ port }, () => {
47+
// check 0.0.0.0 first
48+
server.listen(port, hostname, () => {
4849
port = server.address().port;
4950
server.close();
50-
debug('get free port: %s', port);
51-
callback(null, port);
51+
debug('get %s free port: %s', hostname, port);
52+
if (hostname === 'localhost') {
53+
return callback(null, port);
54+
}
55+
56+
// check localhost second
57+
tryListen(port, maxPort, 'localhost', callback);
5258
});
5359
}

test/detect-port.test.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ describe('detect port test', () => {
1010
before(done => {
1111
done = pedding(11, done);
1212
const server = new net.Server();
13-
server.listen(3000, done);
13+
server.listen(3000, 'localhost', done);
1414
servers.push(server);
1515
for (let port = 7000; port < 7010; port++) {
1616
const server = new net.Server();

0 commit comments

Comments
 (0)