diff --git a/lib/_http_agent.js b/lib/_http_agent.js index 3bb7553417e159..85808ffe935d7b 100644 --- a/lib/_http_agent.js +++ b/lib/_http_agent.js @@ -339,7 +339,11 @@ Agent.prototype.createSocket = function createSocket(req, options, cb) { installListeners(this, s, options); cb(null, s); }); - + // When keepAlive is true, pass the related options to createConnection + if (this.keepAlive) { + options.keepAlive = this.keepAlive; + options.keepAliveInitialDelay = this.keepAliveMsecs; + } const newSocket = this.createConnection(options, oncreate); if (newSocket) oncreate(null, newSocket); diff --git a/test/parallel/test-http-agent-keepalive-delay.js b/test/parallel/test-http-agent-keepalive-delay.js new file mode 100644 index 00000000000000..b5edd78b662709 --- /dev/null +++ b/test/parallel/test-http-agent-keepalive-delay.js @@ -0,0 +1,36 @@ +'use strict'; + +const common = require('../common'); +const assert = require('assert'); +const http = require('http'); +const { Agent } = require('_http_agent'); + +const agent = new Agent({ + keepAlive: true, + keepAliveMsecs: 1000, +}); + +const server = http.createServer(common.mustCall((req, res) => { + res.end('ok'); +})); + +server.listen(0, common.mustCall(() => { + const createConnection = agent.createConnection; + agent.createConnection = (options, ...args) => { + assert.strictEqual(options.keepAlive, true); + assert.strictEqual(options.keepAliveInitialDelay, agent.keepAliveMsecs); + return createConnection.call(agent, options, ...args); + }; + http.get({ + host: 'localhost', + port: server.address().port, + agent: agent, + path: '/' + }, common.mustCall((res) => { + // for emit end event + res.on('data', () => {}); + res.on('end', () => { + server.close(); + }); + })); +}));