Permalink
Browse files

net: support passing undefined to listen()

For consistency with 4.x and 8.x.

This commit also contains a forward port of
#14232 to confirm that 4.x and 6.x
behave identically with respect to the port argument.

Backport-PR-URL: #14234
PR-URL: #14234
Refs: #14205
Reviewed-By: Colin Ihrig <cjihrig@gmail.com>
Reviewed-By: James M Snell <jasnell@gmail.com>
Reviewed-By: Sam Roberts <vieuxtech@gmail.com>
  • Loading branch information...
sam-github authored and MylesBorins committed Jul 14, 2017
1 parent 1aac05b commit caeee38b1debb9636e4a161286f38e999a449808
Showing with 45 additions and 1 deletion.
  1. +1 −1 lib/net.js
  2. +44 −0 test/parallel/test-net-listen-port-option.js
View
@@ -1342,7 +1342,7 @@ Server.prototype.listen = function() {
self.once('listening', lastArg);
}
var port = toNumber(arguments[0]);
var port = typeof arguments[0] === 'undefined' ? 0 : toNumber(arguments[0]);
// The third optional argument is the backlog size.
// When the ip is omitted it can be the second argument.
@@ -26,3 +26,47 @@ net.Server().listen({ port: '' + common.PORT }, close);
net.Server().listen({ port: port }, common.fail);
}, /invalid listen argument/i);
});
// Repeat the tests, passing port as an argument, which validates somewhat
// differently.
net.Server().listen(undefined, close);
net.Server().listen('0', close);
// 'nan', skip, treated as a path, not a port
//'+Infinity', skip, treated as a path, not a port
//'-Infinity' skip, treated as a path, not a port
// 4.x treats these as 0, but 6.x treats them as invalid numbers.
[
-1,
123.456,
0x10000,
1 / 0,
-1 / 0,
].forEach(function(port) {
assert.throws(function() {
net.Server().listen(port, common.fail);
}, /"port" argument must be >= 0 and < 65536/i);
});
// null is treated as 0
net.Server().listen(null, close);
// false/true are converted to 0/1, arguably a bug, but fixing would be
// semver-major. Note that true fails when port 1 low can't be listened on by
// unprivileged processes (Linux) but the listen does succeed on some Windows
// versions.
net.Server().listen(false, close);
(function() {
const done = common.mustCall(function(err) {
if (err)
return assert.strictEqual(err.code, 'EACCES');
assert.strictEqual(this.address().port, 1);
this.close();
});
net.Server().listen(true).on('error', done).on('listening', done);
})();

0 comments on commit caeee38

Please sign in to comment.