diff --git a/lib/_http_server.js b/lib/_http_server.js index 16460fca35..7acc108638 100644 --- a/lib/_http_server.js +++ b/lib/_http_server.js @@ -512,11 +512,13 @@ function connectionListener(socket) { exports._connectionListener = connectionListener; function onSocketResume() { - this._handle.readStart(); + if (this._handle) + this._handle.readStart(); } function onSocketPause() { - this._handle.readStop(); + if (this._handle) + this._handle.readStop(); } function socketOnWrap(ev, fn) { @@ -526,7 +528,7 @@ function socketOnWrap(ev, fn) { return res; } - if (ev === 'data' || ev === 'readable') + if (this._handle && (ev === 'data' || ev === 'readable')) this.parser.unconsume(this._handle._externalStream); return res; diff --git a/test/parallel/test-http-regr-gh-2821.js b/test/parallel/test-http-regr-gh-2821.js new file mode 100644 index 0000000000..4fdef2369b --- /dev/null +++ b/test/parallel/test-http-regr-gh-2821.js @@ -0,0 +1,24 @@ +'use strict'; +const common = require('../common'); +const assert = require('assert'); +const http = require('http'); + +const server = http.createServer(function(req, res) { + res.writeHead(200); + res.end(); + + server.close(); +}); + +server.listen(common.PORT, function() { + + const req = http.request({ + method: 'POST', + port: common.PORT + }); + + const payload = new Buffer(16390); + payload.fill('Й'); + req.write(payload); + req.end(); +});