注意:OP在评论帖中确认问题是由于拼写错误引起的,未在发布的代码中显示。
我希望在使用DisconnectEx安排重叠断开连接后,使用GetQueuedCompletionStatus获取通知。我从来没有得到过 - 这是设计的吗?如果我在OVERLAPPED结构中指定手动重置事件,则会发出信号以指示断开连接已完成,但GetQueuedCompletionStatus永远不会返回。
我对DisconnectEx的调用看起来有点像这样(注意上下文有一个运算符LPOVERLAPPED,ol是结构中的第一个元素):
context.ol.hEvent = hEvent;
BOOL result = DisconnectEx(context.socket, context, TF_REUSE_SOCKET, 0);
if (result)
{
// we completed synchronously:
ProcessCompletion(0, context, 0);
}
else
{
int error = WSAGetLastError();
if (error != ERROR_IO_PENDING)
{
throw ServerSocketException("DisconnectEx failed");
}
WaitForSingleObject(hEvent, INFINITE);
std::cout << "disconnected - event signalled\n";
}
当我发现GetQueuedCompletionStatus没有返回时,我添加了WaitForSingleObject。检测DisconnectEx完成的正确方法是什么?我想在调用AcceptEx时再次使用套接字。