将WaitForMultipleObjects()与ACE_SOCK_Stream一起使用 - 仅在有数据

时间:2018-04-16 15:58:11

标签: ace socketstream waitformultipleobjects

是否可以将WaitForMultipleObjects()与ACE_SOCK_Stream一起使用,并仅在有数据要从中读取时才返回?

我试着跟随:

    // set some params
    DWORD handlesCount = 1;
    DWORD timeoutMs = 5 * 1000;
    HANDLE* handles = new HANDLE[handlesCount]; 
    handles[0] = sock_stream.get_handle();

    while (true) {
        int ret = WaitForMultipleObjects(handlesCount, handles, false, timeoutMs);
        std::cout << "Result: " << ret << std::endl;

但WaitForMultipleObjects()立即返回套接字流索引,表明它已准备好(它在无限循环中打印0)。

通过ACE_SOCK_Acceptor(ACE_SOCK_Acceptor-&gt; accept())接受套接字。

如何使WaitForMultipleObjects()等到套接字有数据要读取?

1 个答案:

答案 0 :(得分:2)

套接字句柄不适合在WFMO中使用。您应该使用WSAEventSelect将所需事件与在WFMO注册的事件句柄相关联。

由于您也熟悉ACE,因此可以查看ace / WFMO_Reactor.cpp,register_handler()方法的源代码,以查看用例以及它如何与WFMO一起使用。