1'use strict'; 2const common = require('../common'); 3const http = require('http'); 4const assert = require('assert'); 5 6const agent = new http.Agent({ keepAlive: true }); 7 8const server = http.createServer((req, res) => { 9 res.end(''); 10}); 11 12// Maximum allowed value for timeouts 13const timeout = 2 ** 31 - 1; 14 15const options = { 16 agent, 17 method: 'GET', 18 port: undefined, 19 host: common.localhostIPv4, 20 path: '/', 21 timeout: timeout 22}; 23 24server.listen(0, options.host, common.mustCall(() => { 25 options.port = server.address().port; 26 doRequest(common.mustCall((numListeners) => { 27 assert.strictEqual(numListeners, 3); 28 doRequest(common.mustCall((numListeners) => { 29 assert.strictEqual(numListeners, 3); 30 server.close(); 31 agent.destroy(); 32 })); 33 })); 34})); 35 36function doRequest(cb) { 37 http.request(options, common.mustCall((response) => { 38 const sockets = agent.sockets[`${options.host}:${options.port}:`]; 39 assert.strictEqual(sockets.length, 1); 40 const socket = sockets[0]; 41 const numListeners = socket.listeners('timeout').length; 42 response.resume(); 43 response.once('end', common.mustCall(() => { 44 process.nextTick(cb, numListeners); 45 })); 46 })).end(); 47} 48