看来,当您使用有效的SocketAsyncEventArgs调用Socket.AcceptAsync并正确装配SocketAsyncEventArgs.Completed事件并且很长一段时间内没有接受任何连接时它只会重置连接.虽然,我的Socket.ReceiveTimeout和Socket.SendTimeout都是零.
我不确定如何设置接受连接的超时,即使这是一个好主意.有没有人有一个解决方法,也许有一些信息,为什么这是默认行为?
我在Microsoft Connect上查看filed a bug report是否有任何理由说明为什么超时期限不稳定.有时它会在五分钟内超时,其他时间则超过两小时.
解决方法
在玩了一下之后,我发现单个SYN – > SYN-ACK – > RST序列将引发SocketAsyncEventArgs.Completed事件并导致SocketAsyncEventArgs.SocketError属性成为SocketError.ConnectionReset.看来这是预期的行为,但它肯定是一个问题,应该更好地记录.
任何端口扫描您的服务器并进行半开放式SYN扫描都会产生类似的流量并导致同样的问题.为了防止软件中的拒绝服务漏洞,应该处理这种特殊情况.