@@ -17,7 +17,6 @@ const readyStates = ['CONNECTING', 'OPEN', 'CLOSING', 'CLOSED'];
17
17
const kWebSocket = constants . kWebSocket ;
18
18
const protocolVersions = [ 8 , 13 ] ;
19
19
const closeTimeout = 30 * 1000 ; // Allow 30 seconds to terminate the connection cleanly.
20
- const NOOP = constants . NOOP ;
21
20
22
21
/**
23
22
* Class representing a WebSocket.
@@ -49,7 +48,6 @@ class WebSocket extends EventEmitter {
49
48
this . _receiver = null ;
50
49
this . _sender = null ;
51
50
this . _socket = null ;
52
- this . _error = null ;
53
51
54
52
if ( address !== null ) {
55
53
if ( ! protocols ) {
@@ -132,10 +130,10 @@ class WebSocket extends EventEmitter {
132
130
receiver [ kWebSocket ] = this ;
133
131
socket [ kWebSocket ] = this ;
134
132
135
- receiver . on ( 'message' , receiverOnMessage ) ;
136
133
receiver . on ( 'close' , receiverOnClose ) ;
137
134
receiver . on ( 'drain' , receiverOnDrain ) ;
138
135
receiver . on ( 'error' , receiverOnError ) ;
136
+ receiver . on ( 'message' , receiverOnMessage ) ;
139
137
receiver . on ( 'ping' , receiverOnPing ) ;
140
138
receiver . on ( 'pong' , receiverOnPong ) ;
141
139
@@ -148,7 +146,6 @@ class WebSocket extends EventEmitter {
148
146
socket . on ( 'data' , socketOnData ) ;
149
147
socket . on ( 'end' , socketOnEnd ) ;
150
148
socket . on ( 'error' , socketOnError ) ;
151
- socket . on ( 'error' , NOOP ) ;
152
149
153
150
this . readyState = WebSocket . OPEN ;
154
151
this . emit ( 'open' ) ;
@@ -167,17 +164,11 @@ class WebSocket extends EventEmitter {
167
164
return ;
168
165
}
169
166
170
- const err = this . _error ;
171
-
172
- if ( err ) {
173
- this . _error = null ;
174
- this . emit ( 'error' , err ) ;
175
- }
176
-
177
167
if ( this . _extensions [ PerMessageDeflate . extensionName ] ) {
178
168
this . _extensions [ PerMessageDeflate . extensionName ] . cleanup ( ) ;
179
169
}
180
170
171
+ this . _receiver . removeAllListeners ( ) ;
181
172
this . emit ( 'close' , this . _closeCode , this . _closeMessage ) ;
182
173
}
183
174
@@ -359,7 +350,6 @@ class WebSocket extends EventEmitter {
359
350
360
351
if ( this . _socket ) {
361
352
this . readyState = WebSocket . CLOSING ;
362
- this . _socket . removeListener ( 'error' , socketOnError ) ;
363
353
this . _socket . destroy ( ) ;
364
354
}
365
355
}
@@ -726,15 +716,21 @@ function receiverOnDrain () {
726
716
function receiverOnError ( err ) {
727
717
const websocket = this [ kWebSocket ] ;
728
718
729
- if ( websocket . _error ) return ;
730
-
731
719
websocket . readyState = WebSocket . CLOSING ;
732
- websocket . _socket . removeListener ( 'error' , socketOnError ) ;
733
720
websocket . _closeCode = err [ constants . kStatusCode ] ;
734
721
websocket . emit ( 'error' , err ) ;
735
722
websocket . _socket . destroy ( ) ;
736
723
}
737
724
725
+ /**
726
+ * The listener of the `Receiver` `'finish'` event.
727
+ *
728
+ * @private
729
+ */
730
+ function receiverOnFinish ( ) {
731
+ this [ kWebSocket ] . emitClose ( ) ;
732
+ }
733
+
738
734
/**
739
735
* The listener of the `Receiver` `'message'` event.
740
736
*
@@ -754,7 +750,7 @@ function receiverOnMessage (data) {
754
750
function receiverOnPing ( data ) {
755
751
const websocket = this [ kWebSocket ] ;
756
752
757
- websocket . pong ( data , ! websocket . _isServer , NOOP ) ;
753
+ websocket . pong ( data , ! websocket . _isServer , constants . NOOP ) ;
758
754
websocket . emit ( 'ping' , data ) ;
759
755
}
760
756
@@ -776,7 +772,8 @@ function receiverOnPong (data) {
776
772
function socketOnClose ( ) {
777
773
const websocket = this [ kWebSocket ] ;
778
774
779
- this . removeListener ( 'error' , socketOnError ) ;
775
+ this . removeListener ( 'close' , socketOnClose ) ;
776
+ this . removeListener ( 'data' , socketOnData ) ;
780
777
this . removeListener ( 'end' , socketOnEnd ) ;
781
778
this [ kWebSocket ] = undefined ;
782
779
@@ -799,13 +796,8 @@ function socketOnClose () {
799
796
) {
800
797
websocket . emitClose ( ) ;
801
798
} else {
802
- const emitClose = ( ) => {
803
- websocket . _receiver . removeAllListeners ( ) ;
804
- websocket . emitClose ( ) ;
805
- } ;
806
-
807
- websocket . _receiver . on ( 'error' , emitClose ) ;
808
- websocket . _receiver . on ( 'finish' , emitClose ) ;
799
+ websocket . _receiver . on ( 'error' , receiverOnFinish ) ;
800
+ websocket . _receiver . on ( 'finish' , receiverOnFinish ) ;
809
801
}
810
802
}
811
803
@@ -830,26 +822,23 @@ function socketOnEnd () {
830
822
const websocket = this [ kWebSocket ] ;
831
823
832
824
websocket . readyState = WebSocket . CLOSING ;
833
- this . removeListener ( 'error' , socketOnError ) ;
834
825
websocket . _receiver . end ( ) ;
835
826
this . end ( ) ;
836
827
}
837
828
838
829
/**
839
830
* The listener of the `net.Socket` `'error'` event.
840
831
*
841
- * @param {Error } err The emitted error
842
832
* @private
843
833
*/
844
- function socketOnError ( err ) {
834
+ function socketOnError ( ) {
845
835
const websocket = this [ kWebSocket ] ;
846
836
847
- websocket . readyState = WebSocket . CLOSING ;
848
837
this . removeListener ( 'error' , socketOnError ) ;
838
+ this . on ( 'error' , constants . NOOP ) ;
849
839
850
- //
851
- // There might be valid buffered data in the socket waiting to be read so we
852
- // can't re-emit this error immediately.
853
- //
854
- websocket . _error = err ;
840
+ if ( websocket ) {
841
+ websocket . readyState = WebSocket . CLOSING ;
842
+ this . destroy ( ) ;
843
+ }
855
844
}
0 commit comments