diff --git a/lib/http-proxy/passes/web-incoming.js b/lib/http-proxy/passes/web-incoming.js index af28546b30b769732c8aa1c43716afd4fb1bb1b2..1e2890e47eec6d5a7dec881370b4fa1be2330466 100644 --- a/lib/http-proxy/passes/web-incoming.js +++ b/lib/http-proxy/passes/web-incoming.js @@ -135,6 +135,11 @@ web_o = Object.keys(web_o).map(function(pass) { proxyReq.on('error', proxyError); function proxyError (err){ + if (req.socket.destroyed && err.code === 'ECONNRESET') { + server.emit('econnreset', err, req, res, options.target); + return proxyReq.abort(); + } + if (clb) { clb(err, req, res, options.target); } else { diff --git a/test/lib-http-proxy-passes-web-incoming-test.js b/test/lib-http-proxy-passes-web-incoming-test.js index 6ca63d398d48dd8f52832c1c7ed3512c04752859..a89fc23545fe03c8468eeb6bf627816a34bc812b 100644 --- a/test/lib-http-proxy-passes-web-incoming-test.js +++ b/test/lib-http-proxy-passes-web-incoming-test.js @@ -229,7 +229,7 @@ describe('#createProxyServer.web() using own http server', function () { var started = new Date().getTime(); function requestHandler(req, res) { - proxy.once('error', function (err, errReq, errRes) { + proxy.once('econnreset', function (err, errReq, errRes) { proxyServer.close(); expect(err).to.be.an(Error); expect(errReq).to.be.equal(req);