如何使用Windows IOCP API确定TCP连接是否被对等方(通过发送RST包或类似方式)断开?具体地说,我不能发送或接收任何数据--没有发生重叠的操作。我只想得到一个异步通知。有没有办法做到这一点?
发布于 2012-06-26 21:01:54
您需要有一个读或写挂起来检测连接关闭。任何一个都会像Remy在RST上建议的那样返回,但是对于一个挂起的读取,当远程端关闭其连接的发送端时,您还会得到通知。
我建议你总是保持一个重叠的读挂起,如果你不想占用内存,你总是可以让它成为一个零字节的读。
发布于 2012-06-26 18:51:36
将通知您的IOCP完成处理程序套接字操作是成功还是失败。这些参数告诉您哪种情况是正确的。
如果您使用的是GetQueuedCompletionStatus()
,如果出现任何故障,都会返回FALSE
。如果是套接字故障,*lpOverlapped
将被设置为失败的OVERLAPPED
操作的非空指针值。如果GetQueuedCompletionStatus()
本身失败,*lpOverlapped
将被设置为NULL。如果对等节点正常断开连接,它将返回TRUE并将*lpNumberOfBytes
设置为0。
如果您使用的是WSAgetOverlappedResult()
,如果出现任何故障,都会返回FALSE。使用WSAGetLastError()
确定是否为套接字故障。如果对等节点正常断开连接,它将返回TRUE并将*lpcbTrasfer
设置为0。
https://stackoverflow.com/questions/11210995
复制