private async Task ReceiveAsync(HttpContext context, WebSocket socket) { var buffer = new byte[BufferSize * 1024]; var result = default(WebSocketReceiveResult); while (socket.State == WebSocketState.Open) { result = await socket.ReceiveAsync(new ArraySegment <byte>(buffer), CancellationToken.None); if (result.MessageType == WebSocketMessageType.Close) { if (!_webSocketManager.OnDisconnected(socket)) { throw new WebSocketException("Error while removing socket"); } break; } else { _webSocketManager.Receive(socket, result, buffer); } } await socket.CloseAsync(result.CloseStatus.Value, "Socket`s closed successfully", CancellationToken.None); }