如果我编写了一个程序,该程序使用IO完成端口使用无阻塞套接字进行多路复用,那么当getQueuedCompletionStatus返回时,我如何知道在套接字上执行的函数是send还是recv?

提前致谢 :)

最佳答案

您将收到一个指向用于该操作的OVERLAPPED结构的指针。只需制作另一个包含OVERLAPPED结构的结构,因此当您以完成状态获得OVERLAPPED时,可以将其变成您的结构:

struct MyOverlapped
{
    OVERLAPPED SystemOverlapped;
    int MyStuff;
    void* MoreStuffForMe;
};

显然,您只需将收到的OVERLAPPED *转换为MyOverlapped *即可进入您的字段。您在字段中输入的内容取决于您自己。

编辑:C++继承也应该工作,所以您也可以做
 struct MyOverlapped : public OVERLAPPED
 {
     ...
 };

10-06 12:42