From 51be03cd577fe8b5a73dd9558bd6a2727f9c3c0b Mon Sep 17 00:00:00 2001 From: Luigi Pinca Date: Mon, 19 Feb 2018 17:54:08 +0100 Subject: [PATCH] http: remove default 'error' listener on upgrade Remove the default `'error'` listener when the socket is freed. This is consistent with the client and prevents spurious `'clientError'` events from being emitted on the server. PR-URL: https://github.com/nodejs/node/pull/18868 Reviewed-By: James M Snell Reviewed-By: Benjamin Gruenbaum Reviewed-By: Ruben Bridgewater Reviewed-By: Joyee Cheung --- lib/_http_server.js | 1 + test/parallel/test-http-connect.js | 7 +++++++ 2 files changed, 8 insertions(+) diff --git a/lib/_http_server.js b/lib/_http_server.js index 1d093bab8bd..e83eeae8585 100644 --- a/lib/_http_server.js +++ b/lib/_http_server.js @@ -521,6 +521,7 @@ function onParserExecuteCommon(server, socket, parser, state, ret, d) { socket.removeListener('close', state.onClose); socket.removeListener('drain', state.onDrain); socket.removeListener('drain', ondrain); + socket.removeListener('error', socketOnError); unconsume(parser, socket); parser.finish(); freeParser(parser, req, null); diff --git a/test/parallel/test-http-connect.js b/test/parallel/test-http-connect.js index 30668ec9937..e7fb116de93 100644 --- a/test/parallel/test-http-connect.js +++ b/test/parallel/test-http-connect.js @@ -30,6 +30,13 @@ server.on('connect', common.mustCall((req, socket, firstBodyChunk) => { assert.strictEqual(req.method, 'CONNECT'); assert.strictEqual(req.url, 'google.com:443'); + // Make sure this socket has detached. + assert.strictEqual(socket.listeners('close').length, 0); + assert.strictEqual(socket.listeners('drain').length, 0); + assert.strictEqual(socket.listeners('data').length, 0); + assert.strictEqual(socket.listeners('end').length, 1); + assert.strictEqual(socket.listeners('error').length, 0); + socket.write('HTTP/1.1 200 Connection established\r\n\r\n'); let data = firstBodyChunk.toString();