public async Task StartAsync() { var endpoint = _options.GetListenEndPoint(); var listenSocket = _listenSocket = new Socket(endpoint.AddressFamily, SocketType.Stream, ProtocolType.Tcp); listenSocket.Bind(endpoint); listenSocket.Listen(_options.Backlog); IsRunning = true; while (IsRunning) { var clientSocket = await listenSocket.AcceptAsync(); var channel = await _channelFactory(clientSocket); OnNewChannelAccepted?.Invoke(this, channel); } }