在.net中,当握手未完成时处理TCP



假设我有一个正在运行的。net服务器和一个接受客户端的TcpListener服务器。我应该如何处理没有回应的客户?

NetworkStreamReadTimeoutWriteTimeout,看起来非常有用,或者你可以保留自己的计时器,并在会话中取得进展时重置它。

但是这些似乎依赖于一个已经建立的tcp连接-当握手连接实际上没有完成的情况下怎么办?是否有一种方法来处理这个使用TcpListenerTcpClient类?如果我不希望这样的连接存在超过几秒钟,我应该设置什么来确保未完成握手的连接被停止?

我找不到明确的信息,是否可能设置一个超时的监听套接字将处理这个。我也不确定AcceptTcpClient是否会在握手未完成时停止阻塞,或者BeginAcceptTcpClient是否保证为未获得完整握手的tcp连接运行回调。它看起来不像,因为回调只在操作实际完成后调用。

本质上,我想知道是否有某种方法可以在侦听端口接收到任何tcp syn包时获得通知-即使握手尚未完成。

另外,似乎这只能通过设置操作系统设置,如NetTCPIP在windows powershell设置。

我认为有两种方法来处理客户端请求超时。其中之一是发送超时属性,您可以使用它来设置客户端请求在发送后应该存活多长时间。此外,ConnectAsync函数具有非常有用的translationtoken参数。如果您不想使用TcpClient而宁愿使用Socket,也有许多方法可以做到这一点,如发送超时或接收超时但是我认为CanclationToken在我看到的代码样本中更常见,你可以在所有Socket函数中传递,如ConnectAsync或SendAsync等。

最新更新