net: allow missing callback for Socket.connect
Arguments of Socket.prototype.connect should be also normalized, causing error when called without callback. Changed Socket.prototype.connect's code same as net.connect and added test. Fixes: https://github.com/nodejs/node/issues/11761 PR-URL: https://github.com/nodejs/node/pull/11762 Reviewed-By: Sam Roberts <vieuxtech@gmail.com> Reviewed-By: Joyee Cheung <joyeec9h3@gmail.com> Reviewed-By: Matteo Collina <matteo.collina@gmail.com> Reviewed-By: Colin Ihrig <cjihrig@gmail.com> Reviewed-By: Evan Lucas <evanlucas@me.com>
This commit is contained in:
Родитель
efec14a7d1
Коммит
c6cbbf9263
24
lib/net.js
24
lib/net.js
|
@ -920,24 +920,18 @@ function connect(self, address, port, addressType, localAddress, localPort) {
|
|||
}
|
||||
|
||||
|
||||
Socket.prototype.connect = function(options, cb) {
|
||||
Socket.prototype.connect = function() {
|
||||
const args = new Array(arguments.length);
|
||||
for (var i = 0; i < arguments.length; i++)
|
||||
args[i] = arguments[i];
|
||||
// TODO(joyeecheung): use destructuring when V8 is fast enough
|
||||
const normalized = normalizeArgs(args);
|
||||
const options = normalized[0];
|
||||
const cb = normalized[1];
|
||||
|
||||
if (this.write !== Socket.prototype.write)
|
||||
this.write = Socket.prototype.write;
|
||||
|
||||
if (options === null || typeof options !== 'object') {
|
||||
// Old API:
|
||||
// connect(port[, host][, cb])
|
||||
// connect(path[, cb]);
|
||||
const args = new Array(arguments.length);
|
||||
for (var i = 0; i < arguments.length; i++)
|
||||
args[i] = arguments[i];
|
||||
const normalized = normalizeArgs(args);
|
||||
const normalizedOptions = normalized[0];
|
||||
const normalizedCb = normalized[1];
|
||||
return Socket.prototype.connect.call(this,
|
||||
normalizedOptions, normalizedCb);
|
||||
}
|
||||
|
||||
if (this.destroyed) {
|
||||
this._readableState.reading = false;
|
||||
this._readableState.ended = false;
|
||||
|
|
|
@ -0,0 +1,20 @@
|
|||
'use strict';
|
||||
const common = require('../common');
|
||||
|
||||
// This test ensures that socket.connect can be called without callback
|
||||
// which is optional.
|
||||
|
||||
const net = require('net');
|
||||
|
||||
const server = net.createServer(common.mustCall(function(conn) {
|
||||
conn.end();
|
||||
server.close();
|
||||
})).listen(0, common.mustCall(function() {
|
||||
const client = new net.Socket();
|
||||
|
||||
client.on('connect', common.mustCall(function() {
|
||||
client.end();
|
||||
}));
|
||||
|
||||
client.connect(server.address());
|
||||
}));
|
Загрузка…
Ссылка в новой задаче