@@ -628,9 +628,10 @@ Proxy.prototype._onWebSocketServerConnect = function(isSSL, ws, upgradeReq) {
628628 ctx . clientToProxyWebSocket . on ( 'ping' , self . _onWebSocketFrame . bind ( self , ctx , 'ping' , false ) ) ;
629629 ctx . clientToProxyWebSocket . on ( 'pong' , self . _onWebSocketFrame . bind ( self , ctx , 'pong' , false ) ) ;
630630 ctx . clientToProxyWebSocket . on ( 'error' , self . _onWebSocketError . bind ( self , ctx ) ) ;
631+ ctx . clientToProxyWebSocket . _socket . on ( 'error' , self . _onWebSocketError . bind ( self , ctx ) ) ;
631632 ctx . clientToProxyWebSocket . on ( 'close' , self . _onWebSocketClose . bind ( self , ctx , false ) ) ;
632633 ctx . clientToProxyWebSocket . _socket . pause ( ) ;
633-
634+
634635 var url ;
635636 if ( upgradeReq . url == '' || / ^ \/ / . test ( upgradeReq . url ) ) {
636637 var hostPort = Proxy . parseHostAndPort ( upgradeReq ) ;
@@ -665,6 +666,7 @@ Proxy.prototype._onWebSocketServerConnect = function(isSSL, ws, upgradeReq) {
665666 ctx . proxyToServerWebSocket . on ( 'error' , self . _onWebSocketError . bind ( self , ctx ) ) ;
666667 ctx . proxyToServerWebSocket . on ( 'close' , self . _onWebSocketClose . bind ( self , ctx , true ) ) ;
667668 ctx . proxyToServerWebSocket . on ( 'open' , function ( ) {
669+ ctx . proxyToServerWebSocket . _socket . on ( 'error' , self . _onWebSocketError . bind ( self , ctx ) ) ;
668670 if ( ctx . clientToProxyWebSocket . readyState === WebSocket . OPEN ) {
669671 ctx . clientToProxyWebSocket . _socket . resume ( ) ;
670672 }
@@ -816,7 +818,7 @@ Proxy.prototype._onHttpServerRequest = function(isSSL, clientToProxyRequest, pro
816818 }
817819 if ( self . responseContentPotentiallyModified || ctx . responseContentPotentiallyModified ) {
818820 ctx . serverToProxyResponse . headers [ 'transfer-encoding' ] = 'chunked' ;
819- delete ctx . serverToProxyResponse . headers [ 'content-length' ] ;
821+ delete ctx . serverToProxyResponse . headers [ 'content-length' ] ;
820822 }
821823 if ( self . keepAlive ) {
822824 if ( ctx . clientToProxyRequest . headers [ 'proxy-connection' ] ) {
@@ -991,14 +993,14 @@ Proxy.prototype._onWebSocketClose = function(ctx, closedByServer, code, message)
991993 }
992994 if ( ctx . clientToProxyWebSocket . readyState !== ctx . proxyToServerWebSocket . readyState ) {
993995 try {
994- if ( ctx . clientToProxyWebSocket . readyState === WebSocket . CLOSED && ctx . proxyToServerWebSocket . readyState === WebSocket . OPEN ) {
995- ctx . proxyToServerWebSocket . close ( code , message ) ;
996+ if ( ctx . clientToProxyWebSocket . readyState === WebSocket . CLOSED && ctx . proxyToServerWebSocket . readyState === WebSocket . OPEN ) {
997+ code === 1005 ? ctx . proxyToServerWebSocket . close ( ) : ctx . proxyToServerWebSocket . close ( code , message ) ;
996998 } else if ( ctx . proxyToServerWebSocket . readyState === WebSocket . CLOSED && ctx . clientToProxyWebSocket . readyState === WebSocket . OPEN ) {
997- ctx . clientToProxyWebSocket . close ( code , message ) ;
999+ code === 1005 ? ctx . proxyToServerWebSocket . close ( ) : ctx . clientToProxyWebSocket . close ( code , message ) ;
9981000 }
999- } catch ( err ) {
1000- return self . _onWebSocketError ( ctx , err ) ;
1001- }
1001+ } catch ( err ) {
1002+ return self . _onWebSocketError ( ctx , err ) ;
1003+ }
10021004 }
10031005 } ) ;
10041006 }
@@ -1014,10 +1016,14 @@ Proxy.prototype._onWebSocketError = function(ctx, err) {
10141016 } ) ;
10151017 }
10161018 if ( ctx . proxyToServerWebSocket && ctx . clientToProxyWebSocket . readyState !== ctx . proxyToServerWebSocket . readyState ) {
1017- if ( ctx . clientToProxyWebSocket . readyState === WebSocket . CLOSED && ctx . proxyToServerWebSocket . readyState === WebSocket . OPEN ) {
1018- ctx . proxyToServerWebSocket . close ( ) ;
1019- } else if ( ctx . proxyToServerWebSocket . readyState === WebSocket . CLOSED && ctx . clientToProxyWebSocket . readyState === WebSocket . OPEN ) {
1020- ctx . clientToProxyWebSocket . close ( ) ;
1019+ try {
1020+ if ( ctx . clientToProxyWebSocket . readyState === WebSocket . CLOSED && ctx . proxyToServerWebSocket . readyState === WebSocket . OPEN ) {
1021+ ctx . proxyToServerWebSocket . close ( ) ;
1022+ } else if ( ctx . proxyToServerWebSocket . readyState === WebSocket . CLOSED && ctx . clientToProxyWebSocket . readyState === WebSocket . OPEN ) {
1023+ ctx . clientToProxyWebSocket . close ( ) ;
1024+ }
1025+ } catch ( err ) {
1026+ // ignore
10211027 }
10221028 }
10231029} ;
0 commit comments