Commit cd78af5f authored by Fedor Indutny's avatar Fedor Indutny

'end' event becomes 'close', added more try-catch handling

parent 7249ef3e
...@@ -315,19 +315,33 @@ HttpProxy.prototype = { ...@@ -315,19 +315,33 @@ HttpProxy.prototype = {
sdata = sdata sdata = sdata
.replace(remote_host, host) .replace(remote_host, host)
.replace(remote_host, host); .replace(remote_host, host);
try {
// Write printable // Write printable
socket.write(sdata); socket.write(sdata);
// Write non-printable // Write non-printable
socket.write(data); socket.write(data);
} catch (e) {
request.end();
socket.end();
}
// Catch socket errors
socket.on('error', function() {
request.end();
});
// Remove data listener // Remove data listener
request.socket.removeListener('data', t); request.socket.removeListener('data', t);
}); });
// Write upgrade-head // Write upgrade-head
try {
request.write(head); request.write(head);
} catch(e) {
request.end();
socket.end();
}
self.unwatch(socket); self.unwatch(socket);
}); });
...@@ -340,14 +354,23 @@ HttpProxy.prototype = { ...@@ -340,14 +354,23 @@ HttpProxy.prototype = {
reverse_proxy.on('data', listeners._r_data = function(data) { reverse_proxy.on('data', listeners._r_data = function(data) {
// Pass data to client // Pass data to client
if (socket.writable) { if (socket.writable) {
try {
socket.write(data); socket.write(data);
} catch (e) {
socket.end();
reverse_proxy.end();
}
} }
}); });
socket.on('data', listeners._data = function(data){ socket.on('data', listeners._data = function(data){
// Pass data from client to server // Pass data from client to server
// Socket thougth that it isn't writable try {
reverse_proxy.write(data); reverse_proxy.write(data);
} catch (e) {
reverse_proxy.end();
socket.end();
}
}); });
// Detach event listeners from reverse_proxy // Detach event listeners from reverse_proxy
...@@ -359,12 +382,12 @@ HttpProxy.prototype = { ...@@ -359,12 +382,12 @@ HttpProxy.prototype = {
} }
// Hook disconnections // Hook disconnections
reverse_proxy.on('close', listeners._r_close = function() { reverse_proxy.on('end', listeners._r_close = function() {
socket.end(); socket.end();
detach(); detach();
}); });
socket.on('close', listeners._close = function() { socket.on('end', listeners._close = function() {
reverse_proxy.end(); reverse_proxy.end();
detach(); detach();
}); });
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment