File tree Expand file tree Collapse file tree 1 file changed +11
-3
lines changed Expand file tree Collapse file tree 1 file changed +11
-3
lines changed Original file line number Diff line number Diff line change @@ -139,9 +139,10 @@ final class WebSocketHandler: ChannelDuplexHandler {
139
139
}
140
140
141
141
private func receivedClose( context: ChannelHandlerContext , frame: WebSocketFrame ) {
142
- // Handle a received close frame. We're just going to close.
143
- context. close ( promise: nil )
144
- }
142
+ // Handle a received close frame. We're just going to close.
143
+ self . isClosed = true
144
+ context. close ( promise: nil )
145
+ }
145
146
146
147
/// Make mask key to be used in WebSocket frame
147
148
func makeMaskKey( ) -> WebSocketMaskingKey ? {
@@ -151,6 +152,12 @@ final class WebSocketHandler: ChannelDuplexHandler {
151
152
152
153
/// Close websocket connection
153
154
public func close( context: ChannelHandlerContext , code: WebSocketErrorCode = . goingAway, promise: EventLoopPromise < Void > ? ) {
155
+ guard isClosed == false else {
156
+ promise? . succeed ( ( ) )
157
+ return
158
+ }
159
+ self . isClosed = true
160
+
154
161
let codeAsInt = UInt16 ( webSocketErrorCode: code)
155
162
let codeToSend : WebSocketErrorCode
156
163
if codeAsInt == 1005 || codeAsInt == 1006 {
@@ -186,6 +193,7 @@ final class WebSocketHandler: ChannelDuplexHandler {
186
193
context. fireErrorCaught ( error)
187
194
}
188
195
196
+ private var isClosed : Bool = false
189
197
}
190
198
191
199
struct WebSocketFrameSequence {
You can’t perform that action at this time.
0 commit comments