0

是否可以将 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->accept()) 接受套接字。

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

4

1 回答 1

2

插座手柄不适合在 WFMO 中使用。您应该使用WSAEventSelect将所需事件与向 WFMO 注册的事件句柄相关联。

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

于 2018-04-17T16:45:40.253 回答