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