如果我编写了一个使用 IO Completion Ports 使用非阻塞套接字进行多路复用的程序,那么当 getQueuedCompletionStatus 返回时,我怎么知道在套接字上执行的函数是 send 还是 recv 呢?
提前致谢 :)
如果我编写了一个使用 IO Completion Ports 使用非阻塞套接字进行多路复用的程序,那么当 getQueuedCompletionStatus 返回时,我怎么知道在套接字上执行的函数是 send 还是 recv 呢?
提前致谢 :)
您正在接收指向用于该操作的 OVERLAPPED 结构的指针。只需制作另一个包含 OVERLAPPED 结构的结构,因此当您在完成状态中获得 OVERLAPPED 时,您可以将其转换为您的结构:
struct MyOverlapped
{
OVERLAPPED SystemOverlapped;
int MyStuff;
void* MoreStuffForMe;
};
显然,您只需将收到的 OVERLAPPED* 转换为 MyOverlapped* 即可到达您的字段。您在字段中输入的内容取决于您。
编辑:C++ 继承也应该工作,所以你也可以这样做
struct MyOverlapped : public OVERLAPPED
{
...
};
哦,我不知道。在初始化 ReadFileEx、WriteFileEx 调用中传入的缓冲区结构中放置一个布尔值。那样的东西...