如何知道一个完成数据包是用于 WSASend() 或 WSARecv() 还是 AcceptEx()?
How to know if a completion packet is for WSASend() or WSARecv() or AcceptEx()?
当我调用WSASend()
或WSARecv()
或AcceptEx()
时,一个完成数据包将被放置在完成端口中,我可以使用GetQueuedCompletionStatus()
将其出队。但是我怎么知道这个完成包代表什么操作呢?
您使用了包含其他信息的 'extended' OVERLAPPED
结构。通常这还包含数据缓冲区和一些标志,这些标志告诉 GetQueuedCompletionStatus()
的调用者完成类型是什么。
网上有很多关于 IOCP 的有用教程,我希望他们都能解释这一点,因为它非常基础。可以找到我的教程 here,以及一些实现一些简单 IOCP 服务器的代码。
当我调用WSASend()
或WSARecv()
或AcceptEx()
时,一个完成数据包将被放置在完成端口中,我可以使用GetQueuedCompletionStatus()
将其出队。但是我怎么知道这个完成包代表什么操作呢?
您使用了包含其他信息的 'extended' OVERLAPPED
结构。通常这还包含数据缓冲区和一些标志,这些标志告诉 GetQueuedCompletionStatus()
的调用者完成类型是什么。
网上有很多关于 IOCP 的有用教程,我希望他们都能解释这一点,因为它非常基础。可以找到我的教程 here,以及一些实现一些简单 IOCP 服务器的代码。