public async Task CloseFromCloseSent_Success() { var closeDescription = "Test Closed"; using (var server = KestrelGameSocketHelpers.CreateServer(LoggerFactory, out var port, async context => { Assert.True(context.GameSockets.IsGameSocketRequest); var gameSocket = await context.GameSockets.AcceptGameSocketAsync(); var serverBuffer = new byte[1024]; var result = await gameSocket.ReceiveAsync(new ArraySegment <byte>(serverBuffer), CancellationToken.None); Assert.True(result.EndOfMessage); Assert.Equal(0, result.Count); Assert.Equal(GameSocketMessageType.Close, result.MessageType); Assert.Equal(GameSocketCloseStatus.NormalClosure, result.CloseStatus); Assert.Equal(closeDescription, result.CloseStatusDescription); await gameSocket.CloseAsync(result.CloseStatus.Value, result.CloseStatusDescription, CancellationToken.None); })) using (var client = new ClientGameSocket()) { await client.ConnectAsync(new Uri($"ws://localhost:{port}/"), CancellationToken.None); await client.CloseOutputAsync(GameSocketCloseStatus.NormalClosure, closeDescription, CancellationToken.None); Assert.Equal(GameSocketState.CloseSent, client.State); await client.CloseAsync(GameSocketCloseStatus.NormalClosure, closeDescription, CancellationToken.None); Assert.Equal(GameSocketState.Closed, client.State); } }