【问题标题】:IO Completion Ports - send or recv?IO 完成端口 - 发送还是接收?
【发布时间】:2012-08-19 16:24:56
【问题描述】:

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

提前致谢:)

【问题讨论】:

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


    【解决方案1】:

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

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

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

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

     struct MyOverlapped : public OVERLAPPED
     {
         ...
     };
    

    【讨论】:

      【解决方案2】:

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

      【讨论】:

      • -1 因为这个答案正在推广一种我认为没有用的不良做法。
      猜你喜欢
      • 2014-02-08
      • 2021-08-31
      • 2015-04-23
      • 1970-01-01
      • 2021-08-05
      • 1970-01-01
      • 1970-01-01
      • 2021-08-30
      • 2010-11-13
      相关资源
      最近更新 更多