node/test/parallel/test-http-client-abort-keep-alive-destroy-res.js
Robert Nagy c1b2f6afbe http: detach socket from IncomingMessage on keep-alive
If the socket is not detached then a future call to res.destroy
(through e.g. pipeline) would unecessarily kill the socket while
its in the agent free list.

PR-URL: https://github.com/nodejs/node/pull/32153
Reviewed-By: Anna Henningsen <anna@addaleax.net>
Reviewed-By: James M Snell <jasnell@gmail.com>
2020-03-10 23:44:49 +01:00

40 lines
891 B
JavaScript

'use strict';
const common = require('../common');
const assert = require('assert');
const http = require('http');
let socketsCreated = 0;
class Agent extends http.Agent {
createConnection(options, oncreate) {
const socket = super.createConnection(options, oncreate);
socketsCreated++;
return socket;
}
}
const server = http.createServer((req, res) => res.end());
server.listen(0, common.mustCall(() => {
const port = server.address().port;
const agent = new Agent({
keepAlive: true,
maxSockets: 1
});
const req = http.get({ agent, port }, common.mustCall((res) => {
res.resume();
res.on('end', () => {
res.destroy();
http.get({ agent, port }, common.mustCall((res) => {
res.resume();
assert.strictEqual(socketsCreated, 1);
agent.destroy();
server.close();
}));
});
}));
req.end();
}));