2

如果我编写了一个使用 IO Completion Ports 使用非阻塞套接字进行多路复用的程序,那么当 getQueuedCompletionStatus 返回时,我怎么知道在套接字上执行的函数是 send 还是 recv 呢?

提前致谢 :)

4

2 回答 2

3

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

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

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

编辑:C++ 继承也应该工作,所以你也可以这样做

 struct MyOverlapped : public OVERLAPPED
 {
     ...
 };
于 2012-08-19T08:24:56.643 回答
-1

哦,我不知道。在初始化 ReadFileEx、WriteFileEx 调用中传入的缓冲区结构中放置一个布尔值。那样的东西...

于 2012-08-19T00:07:19.003 回答