Test for server.listen() more carefully, fix bug

This commit is contained in:
Ryan Dahl 2010-11-16 15:33:21 -08:00
parent a01e09502e
commit cf05257fb7
3 changed files with 58 additions and 27 deletions

View File

@ -1075,8 +1075,15 @@ Server.prototype.listen = function () {
self.addListener('listening', lastArg);
}
var port = toPort(arguments[0] != lastArg ? arguments[0] : null);
if (port === false) {
var port = toPort(arguments[0]);
if (arguments.length == 0 || typeof arguments[0] == 'function') {
// Don't bind(). OS will assign a port with INADDR_ANY.
// The port can be found with server.address()
self.type = 'tcp4';
self.fd = socket(self.type);
self._doListen(port);
} else if (port === false) {
// the first argument specifies a path
self.fd = socket('unix');
self.type = 'unix';
@ -1101,12 +1108,6 @@ Server.prototype.listen = function () {
}
}
});
} else if (!arguments[1]) {
// Don't bind(). OS will assign a port with INADDR_ANY.
// The port can be found with server.address()
self.type = 'tcp4';
self.fd = socket(self.type);
self._doListen(port);
} else {
// the first argument is the port, the second an IP
require('dns').lookup(arguments[1], function (err, ip, addressType) {

View File

@ -0,0 +1,49 @@
var common = require('../common');
var assert = require('assert');
var net = require('net');
// With only a callback, server should get a port assigned by the OS
var address0;
var server0 = net.createServer(function (socket) { });
server0.listen(function() {
address0 = server0.address();
console.log("address0 %j", address0);
server0.close();
});
// No callback to listen(), assume we can bind in 100 ms
var address1;
var server1 = net.createServer(function(socket) { });
server1.listen(common.PORT);
setTimeout(function () {
address1 = server1.address()
console.log("address1 %j", address1);
server1.close();
}, 100);
// Callback to listen()
var address2;
var server2 = net.createServer(function(socket) { });
server2.listen(common.PORT+1, function () {
address2 = server2.address()
console.log("address2 %j", address2);
server2.close();
});
process.on('exit', function () {
assert.ok(address0.port > 100);
assert.equal(common.PORT, address1.port);
assert.equal(common.PORT+1, address2.port);
});

View File

@ -1,19 +0,0 @@
var common = require('../common');
net = require('net');
assert = require('assert');
var address;
var server = net.createServer(function (socket) {
});
server.listen(function() {
address = server.address();
console.log("opened server on %j", address);
server.close();
});
process.on('exit', function () {
assert.ok(address.port > 100);
});