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);
                }
        }