Browse Source

lib: move default address logic to `net._listen2`

When address is not provided to `server.listen()`, `_connectionKey` and
error messages should include actual address and correct family.

PR-URL: https://github.com/iojs/io.js/pull/539
Reviewed-By: Ben Noordhuis <info@bnoordhuis.nl>
v1.8.0-commit
Vladimir Kurchatkin 10 years ago
committed by Ben Noordhuis
parent
commit
8de89ec465
  1. 26
      lib/net.js
  2. 11
      test/sequential/test-net-server-bind.js

26
lib/net.js

@ -1110,9 +1110,29 @@ Server.prototype._listen2 = function(address, port, addressType, backlog, fd) {
// If there is not yet a handle, we need to create one and bind.
// In the case of a server sent via IPC, we don't need to do this.
if (!self._handle) {
if (self._handle) {
debug('_listen2: have a handle already');
} else {
debug('_listen2: create a handle');
var rval = createServerHandle(address, port, addressType, fd);
var rval = null;
if (!address && !util.isNumber(fd)) {
rval = createServerHandle('::', port, 6, fd);
if (util.isNumber(rval)) {
rval = null;
address = '0.0.0.0';
addressType = 4;
} else {
address = '::';
addressType = 6;
}
}
if (rval === null)
rval = createServerHandle(address, port, addressType, fd);
if (util.isNumber(rval)) {
var error = exceptionWithHostPort(rval, 'listen', address, port);
process.nextTick(function() {
@ -1121,8 +1141,6 @@ Server.prototype._listen2 = function(address, port, addressType, backlog, fd) {
return;
}
self._handle = rval;
} else {
debug('_listen2: have a handle already');
}
self._handle.onconnection = onconnection;

11
test/sequential/test-net-server-bind.js

@ -18,12 +18,14 @@ server0.listen(function() {
// No callback to listen(), assume we can bind in 100 ms
var address1;
var connectionKey1;
var server1 = net.createServer(function(socket) { });
server1.listen(common.PORT);
setTimeout(function() {
address1 = server1.address();
connectionKey1 = server1._connectionKey;
console.log('address1 %j', address1);
server1.close();
}, 100);
@ -68,6 +70,15 @@ server4.listen(common.PORT + 3, 127, function() {
process.on('exit', function() {
assert.ok(address0.port > 100);
assert.equal(common.PORT, address1.port);
var expectedConnectionKey1;
if (address1.family === 'IPv6')
expectedConnectionKey1 = '6::::' + address1.port;
else
expectedConnectionKey1 = '4:0.0.0.0:' + address1.port;
assert.equal(connectionKey1, expectedConnectionKey1);
assert.equal(common.PORT + 1, address2.port);
assert.equal(common.PORT + 2, address3.port);
assert.equal(common.PORT + 3, address4.port);

Loading…
Cancel
Save