diff --git a/tests/testwebsockets.nim b/tests/testwebsockets.nim index dbdb5f49..c946c060 100644 --- a/tests/testwebsockets.nim +++ b/tests/testwebsockets.nim @@ -456,6 +456,23 @@ suite "Test Closing": await session.close() check session.readyState == ReadyState.Closed + test "Mutual closing": + proc handle(request: HttpRequest) {.async.} = + check request.uri.path == WSPath + let server = WSServer.new(protos = ["proto"]) + let ws = await server.handleRequest(request) + await ws.close() + + server = createServer( + address = address, + handler = handle, + flags = {ReuseAddr}) + + let session = await connectClient() + await session.close() + await waitForClose(session) + check session.readyState == ReadyState.Closed + test "Server closing with valid close code 3999": proc handle(request: HttpRequest) {.async.} = check request.uri.path == WSPath diff --git a/ws/session.nim b/ws/session.nim index f0fd92d4..896e6516 100644 --- a/ws/session.nim +++ b/ws/session.nim @@ -145,7 +145,7 @@ proc handleClose*( trace "Handling close" - if ws.readyState != ReadyState.Open: + if ws.readyState != ReadyState.Open and ws.readyState != ReadyState.Closing: trace "Connection isn't open, aborting close sequence!" return