Test for server.listen() more carefully, fix bug
This commit is contained in:
parent
a01e09502e
commit
cf05257fb7
17
lib/net.js
17
lib/net.js
@ -1075,8 +1075,15 @@ Server.prototype.listen = function () {
|
|||||||
self.addListener('listening', lastArg);
|
self.addListener('listening', lastArg);
|
||||||
}
|
}
|
||||||
|
|
||||||
var port = toPort(arguments[0] != lastArg ? arguments[0] : null);
|
var port = toPort(arguments[0]);
|
||||||
if (port === false) {
|
|
||||||
|
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
|
// the first argument specifies a path
|
||||||
self.fd = socket('unix');
|
self.fd = socket('unix');
|
||||||
self.type = '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 {
|
} else {
|
||||||
// the first argument is the port, the second an IP
|
// the first argument is the port, the second an IP
|
||||||
require('dns').lookup(arguments[1], function (err, ip, addressType) {
|
require('dns').lookup(arguments[1], function (err, ip, addressType) {
|
||||||
|
49
test/simple/test-net-server-bind.js
Normal file
49
test/simple/test-net-server-bind.js
Normal 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);
|
||||||
|
});
|
@ -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…
x
Reference in New Issue
Block a user