Browse Source

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

v0.7.4-release
Ryan Dahl 14 years ago
parent
commit
cf05257fb7
  1. 17
      lib/net.js
  2. 49
      test/simple/test-net-server-bind.js
  3. 19
      test/simple/test-net-server-listen-assigned-port.js

17
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) {

49
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);
});

19
test/simple/test-net-server-listen-assigned-port.js

@ -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);
});
Loading…
Cancel
Save