mirror of
https://github.com/zebrajr/node.git
synced 2026-01-15 12:15:26 +00:00
http: cleanup ClientRequest oncreate
PR-URL: https://github.com/nodejs/node/pull/36862 Reviewed-By: Rich Trott <rtrott@gmail.com> Reviewed-By: Matteo Collina <matteo.collina@gmail.com> Reviewed-By: Daniele Belardi <dwon.dnl@gmail.com>
This commit is contained in:
committed by
Daniele Belardi
parent
f64ad30c35
commit
963dec304d
@@ -44,6 +44,7 @@ const {
|
||||
const net = require('net');
|
||||
const url = require('url');
|
||||
const assert = require('internal/assert');
|
||||
const { once } = require('internal/util');
|
||||
const {
|
||||
_checkIsHttpToken: checkIsHttpToken,
|
||||
debug,
|
||||
@@ -240,8 +241,6 @@ function ClientRequest(input, options, cb) {
|
||||
this.host = host;
|
||||
this.protocol = protocol;
|
||||
|
||||
let called = false;
|
||||
|
||||
if (this.agent) {
|
||||
// If there is an agent we should default to Connection:keep-alive,
|
||||
// but only if the Agent will actually reuse the connection!
|
||||
@@ -305,18 +304,6 @@ function ClientRequest(input, options, cb) {
|
||||
options.headers);
|
||||
}
|
||||
|
||||
const oncreate = (err, socket) => {
|
||||
if (called)
|
||||
return;
|
||||
called = true;
|
||||
if (err) {
|
||||
process.nextTick(() => this.emit('error', err));
|
||||
return;
|
||||
}
|
||||
this.onSocket(socket);
|
||||
this._deferToConnect(null, null, () => this._flush());
|
||||
};
|
||||
|
||||
// initiate connection
|
||||
if (this.agent) {
|
||||
this.agent.addRequest(this, options);
|
||||
@@ -325,20 +312,27 @@ function ClientRequest(input, options, cb) {
|
||||
this._last = true;
|
||||
this.shouldKeepAlive = false;
|
||||
if (typeof options.createConnection === 'function') {
|
||||
const newSocket = options.createConnection(options, oncreate);
|
||||
if (newSocket && !called) {
|
||||
called = true;
|
||||
this.onSocket(newSocket);
|
||||
} else {
|
||||
return;
|
||||
const oncreate = once((err, socket) => {
|
||||
if (err) {
|
||||
process.nextTick(() => this.emit('error', err));
|
||||
} else {
|
||||
this.onSocket(socket);
|
||||
}
|
||||
});
|
||||
|
||||
try {
|
||||
const newSocket = options.createConnection(options, oncreate);
|
||||
if (newSocket) {
|
||||
oncreate(null, newSocket);
|
||||
}
|
||||
} catch (err) {
|
||||
oncreate(err);
|
||||
}
|
||||
} else {
|
||||
debug('CLIENT use net.createConnection', options);
|
||||
this.onSocket(net.createConnection(options));
|
||||
}
|
||||
}
|
||||
|
||||
this._deferToConnect(null, null, () => this._flush());
|
||||
}
|
||||
ObjectSetPrototypeOf(ClientRequest.prototype, OutgoingMessage.prototype);
|
||||
ObjectSetPrototypeOf(ClientRequest, OutgoingMessage);
|
||||
@@ -826,6 +820,7 @@ function onSocketNT(req, socket, err) {
|
||||
_destroy(req, null, err);
|
||||
} else {
|
||||
tickOnSocket(req, socket);
|
||||
req._flush();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user