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

前端之家收集整理的这篇文章主要介绍了c# – 为什么System.Net.Sockets.Socket.AcceptAsync在长时间不活动后与ConnectionReset一起完成?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
看来,当您使用有效的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扫描都会产生类似的流量并导致同样的问题.为了防止软件中的拒绝服务漏洞,应该处理这种特殊情况.

原文链接:https://www.f2er.com/csharp/99836.html

猜你在找的C#相关文章