如何使用 Windows IOCP API 确定 TCP 连接是否被对等方(通过发送 RST 数据包或类似方法)断开?具体来说,我无法发送或接收任何数据——没有重叠的操作正在进行。我只想得到一个异步通知。有没有办法做到这一点?
问问题
2433 次
2 回答
4
您需要有一个读或写挂起来检测连接关闭。两者都将按照 Remy 在 RST 上的建议返回,但在等待读取时,您还将收到远程端何时关闭其连接的发送端的通知。
我建议您始终保持重叠读取待处理,如果您不想占用内存,您可以随时将其设为零字节读取。
于 2012-06-26T21:01:53.847 回答
1
您的 IOCP 完成处理程序将收到套接字操作成功或失败的通知。参数告诉你是哪种情况。
如果您正在使用,如果发生任何故障GetQueuedCompletionStatus()
,它将返回。FALSE
如果是套接字失败,*lpOverlapped
则将失败的OVERLAPPED
操作设置为非 NULL 指针值。如果GetQueuedCompletionStatus()
本身失败,*lpOverlapped
将被设置为NULL。如果对等端正常断开连接,它将返回 TRUE 并设置*lpNumberOfBytes
为 0。
如果您正在使用WSAgetOverlappedResult()
,如果发生任何故障,它将返回 FALSE。用于WSAGetLastError()
确定是否是套接字故障。如果对等端正常断开连接,它将返回 TRUE 并设置*lpcbTrasfer
为 0。
于 2012-06-26T18:51:35.633 回答