PeerCastStation.Core.ConnectionHandler.HandleClient C# (CSharp) Method

HandleClient() public method

public HandleClient ( TcpClient client, AccessControlInfo acinfo ) : Task
client System.Net.Sockets.TcpClient
acinfo AccessControlInfo
return Task
    public async Task HandleClient(TcpClient client, AccessControlInfo acinfo)
    {
      logger.Debug("Output thread started");
      client.ReceiveBufferSize = 16*1024;
      client.SendBufferSize    = 16*1024;
      client.NoDelay = true;
      var stream = client.GetStream();
      int trying = 0;
      try {
        retry:
        stream.WriteTimeout = 3000;
        stream.ReadTimeout  = 3000;
        var remote_endpoint = (IPEndPoint)client.Client.RemoteEndPoint;
        var handler = await CreateMatchedHandler(remote_endpoint, stream, acinfo);
        if (handler!=null) {
          logger.Debug("Output stream started {0}", trying);
          var result = await handler.Start();
          switch (result) {
          case HandlerResult.Continue:
            trying++;
            goto retry;
          case HandlerResult.Close:
          case HandlerResult.Error:
          default:
            break;
          }
        }
        else {
          logger.Debug("No protocol handler matched");
        }
      }
      finally {
        logger.Debug("Closing client connection");
        stream.Close();
        client.Close();
      }
    }