summaryrefslogtreecommitdiff
path: root/lib/_http_server.js
diff options
context:
space:
mode:
Diffstat (limited to 'lib/_http_server.js')
-rw-r--r--lib/_http_server.js31
1 files changed, 17 insertions, 14 deletions
diff --git a/lib/_http_server.js b/lib/_http_server.js
index 62b58dd2e1..39a49fedc3 100644
--- a/lib/_http_server.js
+++ b/lib/_http_server.js
@@ -404,9 +404,10 @@ function connectionListenerInternal(server, socket) {
socket.on('resume', onSocketResume);
socket.on('pause', onSocketPause);
- // Override on to unconsume on `data`, `readable` listeners
- socket.on = socketOnWrap;
- socket.addListener = socket.on;
+ // Overrides to unconsume on `data`, `readable` listeners
+ socket.on = generateSocketListenerWrapper('on');
+ socket.addListener = generateSocketListenerWrapper('addListener');
+ socket.prependListener = generateSocketListenerWrapper('prependListener');
// We only consume the socket if it has never been consumed before.
if (socket._handle && socket._handle.isStreamBase &&
@@ -754,19 +755,21 @@ function unconsume(parser, socket) {
}
}
-function socketOnWrap(ev, fn) {
- const res = net.Socket.prototype.on.call(this, ev, fn);
- if (!this.parser) {
- this.prependListener = net.Socket.prototype.prependListener;
- this.on = net.Socket.prototype.on;
- this.addListener = this.on;
- return res;
- }
+function generateSocketListenerWrapper(originalFnName) {
+ return function socketListenerWrap(ev, fn) {
+ const res = net.Socket.prototype[originalFnName].call(this, ev, fn);
+ if (!this.parser) {
+ this.on = net.Socket.prototype.on;
+ this.addListener = net.Socket.prototype.addListener;
+ this.prependListener = net.Socket.prototype.prependListener;
+ return res;
+ }
- if (ev === 'data' || ev === 'readable')
- unconsume(this.parser, this);
+ if (ev === 'data' || ev === 'readable')
+ unconsume(this.parser, this);
- return res;
+ return res;
+ };
}
function resetHeadersTimeoutOnReqEnd() {