diff --git a/lib/net.js b/lib/net.js index b9bbad7762..90c37cb26e 100644 --- a/lib/net.js +++ b/lib/net.js @@ -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) { diff --git a/test/simple/test-net-server-bind.js b/test/simple/test-net-server-bind.js new file mode 100644 index 0000000000..62d6d6a2d5 --- /dev/null +++ b/test/simple/test-net-server-bind.js @@ -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); +}); diff --git a/test/simple/test-net-server-listen-assigned-port.js b/test/simple/test-net-server-listen-assigned-port.js deleted file mode 100644 index 4bfffec446..0000000000 --- a/test/simple/test-net-server-listen-assigned-port.js +++ /dev/null @@ -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); -}); -