@@ -315,22 +315,36 @@ HttpProxy.prototype = {
315
315
sdata = sdata
316
316
. replace ( remote_host , host )
317
317
. replace ( remote_host , host ) ;
318
+ try {
319
+ // Write printable
320
+ socket . write ( sdata ) ;
318
321
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
+
325
334
// Remove data listener
326
335
request . socket . removeListener ( 'data' , t ) ;
327
336
} ) ;
328
337
329
338
// Write upgrade-head
330
- request . write ( head ) ;
339
+ try {
340
+ request . write ( head ) ;
341
+ } catch ( e ) {
342
+ request . end ( ) ;
343
+ socket . end ( ) ;
344
+ }
331
345
self . unwatch ( socket ) ;
332
346
} ) ;
333
-
347
+
334
348
// Request
335
349
336
350
function onUpgrade ( reverse_proxy ) {
@@ -340,14 +354,23 @@ HttpProxy.prototype = {
340
354
reverse_proxy . on ( 'data' , listeners . _r_data = function ( data ) {
341
355
// Pass data to client
342
356
if ( socket . writable ) {
343
- socket . write ( data ) ;
357
+ try {
358
+ socket . write ( data ) ;
359
+ } catch ( e ) {
360
+ socket . end ( ) ;
361
+ reverse_proxy . end ( ) ;
362
+ }
344
363
}
345
364
} ) ;
346
365
347
366
socket . on ( 'data' , listeners . _data = function ( data ) {
348
367
// 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
+ }
351
374
} ) ;
352
375
353
376
// Detach event listeners from reverse_proxy
@@ -359,12 +382,12 @@ HttpProxy.prototype = {
359
382
}
360
383
361
384
// Hook disconnections
362
- reverse_proxy . on ( 'close ' , listeners . _r_close = function ( ) {
385
+ reverse_proxy . on ( 'end ' , listeners . _r_close = function ( ) {
363
386
socket . end ( ) ;
364
387
detach ( ) ;
365
388
} ) ;
366
389
367
- socket . on ( 'close ' , listeners . _close = function ( ) {
390
+ socket . on ( 'end ' , listeners . _close = function ( ) {
368
391
reverse_proxy . end ( ) ;
369
392
detach ( ) ;
370
393
} ) ;
0 commit comments