public async Task TestServerAbort() { //arrange var server = new WebListenerWebSocketServer(); var port = _FreeTcpPort(); Guid _cid = Guid.Empty; bool _serverDisconnected = false; bool _clientDisconnected = false; var connectedTCS = new TaskCompletionSource <bool>(); var serverDisconnectTCS = new TaskCompletionSource <bool>(); var beh = new testBeh() { ClosedHandler = (h) => { if (h.ConnectionId == _cid) { serverDisconnectTCS.TrySetResult(true); _serverDisconnected = true; } }, ConnectionEstablished = (id, ctx) => { _cid = id; connectedTCS.TrySetResult(true); } }; beh.StringMessageHandler = (e) => { e.WebSocket.SendStringAsync(e.Data + e.Data, CancellationToken.None); }; var u = $"://localhost:{port}/"; server.AddRouteBehavior("/aaa", () => beh); await server.StartAsync("http" + u); var clientDisconnectTCS = new TaskCompletionSource <bool>(); var client = new WebSocketClient() { CloseHandler = (c) => { clientDisconnectTCS.TrySetResult(true); _clientDisconnected = true; } }; await client.ConnectAsync("ws" + u + "aaa"); //act await connectedTCS.Task; server.AbortConnection(_cid); //Assert; await Task.WhenAny(Task.Delay(200), serverDisconnectTCS.Task); Assert.True(_serverDisconnected); await Task.WhenAny(Task.Delay(200), clientDisconnectTCS.Task); Assert.True(_clientDisconnected); var clients = server.GetActiveConnectionIds(); Assert.Empty(clients); server.Dispose(); }