diff --git a/lib/_http_server.js b/lib/_http_server.js index 0b4077bf07367a..2df4260411fd31 100644 --- a/lib/_http_server.js +++ b/lib/_http_server.js @@ -681,6 +681,7 @@ Server.prototype.closeIdleConnections = function closeIdleConnections() { } const connections = this[kConnections].idle(); + const allConnections = this[kConnections].all(); for (let i = 0, l = connections.length; i < l; i++) { if (connections[i].socket._httpMessage && !connections[i].socket._httpMessage.finished) { @@ -689,6 +690,12 @@ Server.prototype.closeIdleConnections = function closeIdleConnections() { connections[i].socket.destroy(); } + + for (let i = 0, l = allConnections.length; i < l; i++) { + if (allConnections[i].socket.bytesRead === 0) { + allConnections[i].socket.destroy(); + } + } }; Server.prototype.setTimeout = function setTimeout(msecs, callback) { diff --git a/test/parallel/test-http-server-close-idle-connections-pre-request.js b/test/parallel/test-http-server-close-idle-connections-pre-request.js new file mode 100644 index 00000000000000..a9142b17348969 --- /dev/null +++ b/test/parallel/test-http-server-close-idle-connections-pre-request.js @@ -0,0 +1,23 @@ +'use strict'; + +const common = require('../common'); + +const { createServer } = require('http'); +const { createConnection } = require('net'); + +const server = createServer(common.mustNotCall()); + +server.listen(0, '127.0.0.1', common.mustCall(() => { + const port = server.address().port; + server.once('connection', common.mustCall(() => { + server.close(common.mustCall()); + server.closeIdleConnections(); + setTimeout(common.mustNotCall(), common.platformTimeout(1000)).unref(); + })); + + const socket = createConnection(port, '127.0.0.1'); + + socket.on('connect', common.mustCall()); + socket.on('close', common.mustCall()); + socket.on('error', () => {}); +}));