Skip to content

Commit cd78af5

Browse files
committed
'end' event becomes 'close', added more try-catch handling
1 parent 7249ef3 commit cd78af5

File tree

1 file changed

+36
-13
lines changed

1 file changed

+36
-13
lines changed

lib/node-http-proxy.js

+36-13
Original file line numberDiff line numberDiff line change
@@ -315,22 +315,36 @@ HttpProxy.prototype = {
315315
sdata = sdata
316316
.replace(remote_host, host)
317317
.replace(remote_host, host);
318+
try {
319+
// Write printable
320+
socket.write(sdata);
318321

319-
// Write printable
320-
socket.write(sdata);
321-
322-
// Write non-printable
323-
socket.write(data);
324-
322+
// Write non-printable
323+
socket.write(data);
324+
} catch (e) {
325+
request.end();
326+
socket.end();
327+
}
328+
329+
// Catch socket errors
330+
socket.on('error', function() {
331+
request.end();
332+
});
333+
325334
// Remove data listener
326335
request.socket.removeListener('data', t);
327336
});
328337

329338
// Write upgrade-head
330-
request.write(head);
339+
try {
340+
request.write(head);
341+
} catch(e) {
342+
request.end();
343+
socket.end();
344+
}
331345
self.unwatch(socket);
332346
});
333-
347+
334348
// Request
335349

336350
function onUpgrade(reverse_proxy) {
@@ -340,14 +354,23 @@ HttpProxy.prototype = {
340354
reverse_proxy.on('data', listeners._r_data = function(data) {
341355
// Pass data to client
342356
if (socket.writable) {
343-
socket.write(data);
357+
try {
358+
socket.write(data);
359+
} catch (e) {
360+
socket.end();
361+
reverse_proxy.end();
362+
}
344363
}
345364
});
346365

347366
socket.on('data', listeners._data = function(data){
348367
// Pass data from client to server
349-
// Socket thougth that it isn't writable
350-
reverse_proxy.write(data);
368+
try {
369+
reverse_proxy.write(data);
370+
} catch (e) {
371+
reverse_proxy.end();
372+
socket.end();
373+
}
351374
});
352375

353376
// Detach event listeners from reverse_proxy
@@ -359,12 +382,12 @@ HttpProxy.prototype = {
359382
}
360383

361384
// Hook disconnections
362-
reverse_proxy.on('close', listeners._r_close = function() {
385+
reverse_proxy.on('end', listeners._r_close = function() {
363386
socket.end();
364387
detach();
365388
});
366389

367-
socket.on('close', listeners._close = function() {
390+
socket.on('end', listeners._close = function() {
368391
reverse_proxy.end();
369392
detach();
370393
});

0 commit comments

Comments
 (0)