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

标签 c# .net sockets asynchronous

看起来,当您使用有效的 SocketAsyncEventArgs 调用 Socket.AcceptAsync 并正确装配了 SocketAsyncEventArgs.Completed 事件时,没有连接接受了很长一段时间,它只是重置连接。虽然,我的 Socket.ReceiveTimeoutSocket.SendTimeout 都是零。

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

filed a bug report在 Microsoft Connect 上查看他们是否有任何理由支持超时期限不稳定的原因。有时它会在五分钟内超时,有时会超过两个小时。

最佳答案

在尝试了一段时间之后,我发现单个 SYN -> SYN-ACK -> RST 序列将引发 SocketAsyncEventArgs.Completed 事件并导致 SocketAsyncEventArgs.SocketError 属性变为 SocketError.ConnectionReset。这似乎是预期的行为,但它绝对是一个陷阱,应该更好地记录下来。

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

关于c# - 为什么 System.Net.Sockets.Socket.AcceptAsync 在长时间不活动后完成 ConnectionReset?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8263267/

相关文章:

c# - 异步函数未被调用

c# - .NET 反射来识别属性关系

c# - 自定义 ToolStripItem

c# - 什么是 async 和 await,什么时候在 Windows 开发中使用它们?

javascript - 如何将套接字信息自动添加到MySQL

node.js - 与 Node 的 SMTP 连接

c# - `Process` 不以进程参数中的特殊字符开头

c# - 在 C# 中使用 out 关键字

java - 通过 java 套接字编程共享的文件最终在接收端被损坏

c# - 通过 Web Api 中的请求支持 Protobuf-net