Skip to content

Commit 6eac900

Browse files
committed
Add isClosed flag to WebSocketHandler
1 parent 8fe6e21 commit 6eac900

File tree

1 file changed

+11
-3
lines changed

1 file changed

+11
-3
lines changed

Sources/MQTTNIO/WebSocketHandler.swift

Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -139,9 +139,10 @@ final class WebSocketHandler: ChannelDuplexHandler {
139139
}
140140

141141
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+
}
145146

146147
/// Make mask key to be used in WebSocket frame
147148
func makeMaskKey() -> WebSocketMaskingKey? {
@@ -151,6 +152,12 @@ final class WebSocketHandler: ChannelDuplexHandler {
151152

152153
/// Close websocket connection
153154
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+
154161
let codeAsInt = UInt16(webSocketErrorCode: code)
155162
let codeToSend: WebSocketErrorCode
156163
if codeAsInt == 1005 || codeAsInt == 1006 {
@@ -186,6 +193,7 @@ final class WebSocketHandler: ChannelDuplexHandler {
186193
context.fireErrorCaught(error)
187194
}
188195

196+
private var isClosed: Bool = false
189197
}
190198

191199
struct WebSocketFrameSequence {

0 commit comments

Comments
 (0)