IO完成端口 - 发送还是恢复?

时间:2012-08-18 23:30:51

标签: c++ winsock io-completion-ports

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

提前致谢:)

2 个答案:

答案 0 :(得分:3)

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

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

显然,您只需将收到的OVERLAPPED *转换为MyOverlapped *即可到达您的字段。你在田里放什么取决于你。

编辑:C ++继承也应该有用,所以你也可以做

 struct MyOverlapped : public OVERLAPPED
 {
     ...
 };

答案 1 :(得分:-1)

哦,我不知道。在启动ReadFileEx,WriteFileEx调用中传入的缓冲区结构中放置一个布尔值。像那样......