首页 文章

失败DisconnectEx / AcceptEx仍会安排重叠的IOCP事件

提问于
浏览
0

Windows 8,x64 .

使用重叠的Windows套接字Api和IOCP .

注意到套接字的意外行为:例如,对DisconnectEx的调用返回错误WSAENOTCONN但稍后我在GetQueuedCompletionStatusEx中收到一个事件,确切地说是断开连接(就像它仍然被调度而不管返回的错误) . AcceptEx也是如此(返回了不同的错误,例如WSAEINVAL) .

我期待IOCP事件仅针对挂起的操作(返回的错误代码WSA_IO_PENDING)进行调度,而不是其他错误 .

EDIT :我的问题是:即使对DisconnectEx / AcceptEx的调用返回的错误(WSAGetLastError)不是WSA_IO_PENDING,系统也可以调度IOCP事件吗?

谢谢!

2 回答

  • 0

    IOCP倾向于在看似奇怪的时候充斥你的状态,包括在你认为句柄被关闭之后......我用于此的解决方案是使用自定义OVERLAPPED参数执行PostQueuedCompletionStatus()以在我关闭句柄后指示"closed for real now" . 然后将处理任何排队的系统状态,当我得到自定义OVERLAPPED时,我知道我可以释放与句柄相关的所有内部缓冲区 .

  • 1

    上述问题的答案是否定的 . 我遇到的问题是我搞砸了在同一重叠结构上安排几个IOCP事件,这导致了这种奇怪的行为 .

相关问题