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