为什么System.Net.Sockets.Socket.AcceptAsync在长时间不活动后与ConnectionReset一起完成?

Mic*_*ray 7 .net c# sockets asynchronous

看来,当您Socket.AcceptAsync使用有效呼叫SocketAsyncEventArgs并且SocketAsyncEventArgs.Completed事件已正确装配并且在很长一段时间内未接受任何连接时,它只会重置连接.虽然,我Socket.ReceiveTimeoutSocket.SendTimeout他们都是零.

我不确定如何设置接受连接的超时,即使这是一个好主意.有没有人有一个解决方法,也许有一些信息,为什么这是默认行为?

我在Microsoft Connect上提交了一个错误报告,看看他们是否有任何理由说明为什么超时期限不稳定.有时它会在五分钟内超时,其他时间则超过两小时.

Mic*_*ray 4

经过一番尝试后,我发现单个 SYN -> SYN-ACK -> RST 序列将引发事件SocketAsyncEventArgs.Completed并导致SocketAsyncEventArgs.SocketError属性变为SocketError.ConnectionReset. 看起来这是预期的行为,但这绝对是一个陷阱,应该更好地记录下来。

任何扫描您的服务器端口并进行半开放 SYN 类型扫描的人都会生成类似的流量并导致相同的问题。为了防止软件中出现拒绝服务漏洞,应该处理这一特殊情况。