diff --git a/lib/http-proxy/passes/ws-incoming.js b/lib/http-proxy/passes/ws-incoming.js index a9e8797..7673fe0 100644 --- a/lib/http-proxy/passes/ws-incoming.js +++ b/lib/http-proxy/passes/ws-incoming.js @@ -88,10 +88,16 @@ var passes = exports; common.setupOutgoing(options.ssl || {}, options, req) ); // Error Handler - proxyReq.on('error', onError); + proxyReq.on('error', onOutgoingError); proxyReq.on('upgrade', function(proxyRes, proxySocket, proxyHead) { - proxySocket.on('error', onError); + proxySocket.on('error', onOutgoingError); + // The pipe below will end proxySocket if socket closes cleanly, but not + // if it errors (eg, vanishes from the net and starts returning + // EHOSTUNREACH). We need to do that explicitly. + socket.on('error', function () { + proxySocket.end(); + }); common.setupSocket(proxySocket); @@ -106,7 +112,7 @@ var passes = exports; return proxyReq.end(); // XXX: CHECK IF THIS IS THIS CORRECT - function onError(err) { + function onOutgoingError(err) { if (clb) { clb(err, req, socket); } else {