diff --git a/lib/_http_client.js b/lib/_http_client.js index f3b88b62730175..ee694a472462be 100644 --- a/lib/_http_client.js +++ b/lib/_http_client.js @@ -489,6 +489,8 @@ function socketOnData(d) { prepareError(ret, parser, d); debug('parse error', ret); freeParser(parser, req, socket); + socket.removeListener('data', socketOnData); + socket.removeListener('end', socketOnEnd); socket.destroy(); req.socket._hadError = true; req.emit('error', ret); diff --git a/test/parallel/test-http-client-parse-error.js b/test/parallel/test-http-client-parse-error.js index 2c18bdbede0139..5d0ad4b1463ed5 100644 --- a/test/parallel/test-http-client-parse-error.js +++ b/test/parallel/test-http-client-parse-error.js @@ -23,6 +23,7 @@ const common = require('../common'); const http = require('http'); const net = require('net'); +const assert = require('assert'); const Countdown = require('../common/countdown'); const countdown = new Countdown(2, () => server.close()); @@ -38,10 +39,12 @@ const server = server.listen(0, common.mustCall(() => { for (let i = 0; i < 2; i++) { - http.get({ + const req = http.get({ port: server.address().port, path: '/' }).on('error', common.mustCall((e) => { + assert.strictEqual(req.socket.listenerCount('data'), 0); + assert.strictEqual(req.socket.listenerCount('end'), 1); common.expectsError({ code: 'HPE_INVALID_CONSTANT', message: 'Parse Error: Expected HTTP/'