http: do not blindly destroy UNIX domain sockets
`Connection: keep-alive` is now properly supported when making client connections to UNIX domain sockets so `request.abort()` should not blindly destroy the underlying socket. PR-URL: https://github.com/nodejs/node/pull/15650 Refs: https://github.com/nodejs/node/pull/13214#issuecomment-304049523 Reviewed-By: Anatoli Papirovski <apapirovski@mac.com>
This commit is contained in:
parent
88e55fe5e0
commit
eb2fbd159f
@ -663,7 +663,7 @@ ClientRequest.prototype.onSocket = function onSocket(socket) {
|
||||
function onSocketNT(req, socket) {
|
||||
if (req.aborted) {
|
||||
// If we were aborted while waiting for a socket, skip the whole thing.
|
||||
if (req.socketPath || !req.agent) {
|
||||
if (!req.agent) {
|
||||
socket.destroy();
|
||||
} else {
|
||||
socket.emit('free');
|
||||
|
@ -0,0 +1,38 @@
|
||||
'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());
|
||||
|
||||
const socketPath = common.PIPE;
|
||||
common.refreshTmpDir();
|
||||
|
||||
server.listen(socketPath, common.mustCall(() => {
|
||||
const agent = new Agent({
|
||||
keepAlive: true,
|
||||
maxSockets: 1
|
||||
});
|
||||
|
||||
http.get({ agent, socketPath }, (res) => res.resume());
|
||||
|
||||
const req = http.get({ agent, socketPath }, common.mustNotCall());
|
||||
req.abort();
|
||||
|
||||
http.get({ agent, socketPath }, common.mustCall((res) => {
|
||||
res.resume();
|
||||
assert.strictEqual(socketsCreated, 1);
|
||||
agent.destroy();
|
||||
server.close();
|
||||
}));
|
||||
}));
|
Loading…
x
Reference in New Issue
Block a user