Skip to content

Commit d6b50c6

Browse files
timdpaddaleax
authored andcommitted
http: make ClientRequest#setTimeout() noop at end
Originally discovered and resolved by @szmarczak. PR-URL: #25536 Fixes: #25499 Reviewed-By: James M Snell <[email protected]> Reviewed-By: Luigi Pinca <[email protected]>
1 parent 65478fa commit d6b50c6

File tree

2 files changed

+37
-0
lines changed

2 files changed

+37
-0
lines changed

lib/_http_client.js

+4
Original file line numberDiff line numberDiff line change
@@ -733,6 +733,10 @@ function _deferToConnect(method, arguments_, cb) {
733733
}
734734

735735
ClientRequest.prototype.setTimeout = function setTimeout(msecs, callback) {
736+
if (this._ended) {
737+
return this;
738+
}
739+
736740
listenSocketTimeout(this);
737741
msecs = validateTimerDuration(msecs);
738742
if (callback) this.once('timeout', callback);
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
'use strict';
2+
3+
// Test https://github.com/nodejs/node/issues/25499 fix.
4+
5+
const { mustCall } = require('../common');
6+
7+
const { Agent, createServer, get } = require('http');
8+
const { strictEqual } = require('assert');
9+
10+
const server = createServer(mustCall((req, res) => {
11+
res.end();
12+
}));
13+
14+
server.listen(0, () => {
15+
const agent = new Agent({ keepAlive: true, maxSockets: 1 });
16+
const port = server.address().port;
17+
18+
let socket;
19+
20+
const req = get({ agent, port }, (res) => {
21+
res.on('end', () => {
22+
strictEqual(req.setTimeout(0), req);
23+
strictEqual(socket.listenerCount('timeout'), 0);
24+
agent.destroy();
25+
server.close();
26+
});
27+
res.resume();
28+
});
29+
30+
req.on('socket', (sock) => {
31+
socket = sock;
32+
});
33+
});

0 commit comments

Comments
 (0)