1

我是 c-ares 库的新手,我想扩展下面的示例,以便我可以同时等待多个查询完成。这是一个工作示例:

void processChannelBlocking(Channel &c) {
    int nfds, count;
    fd_set readers, writers;
    struct timeval tv;
    while (c.isRunning()) {
        FD_ZERO(&readers);
        FD_ZERO(&writers);
        tv.tv_sec  = std::numeric_limits<typeof(tv.tv_sec)>::max();
        tv.tv_usec = std::numeric_limits<typeof(tv.tv_usec)>::max();
        nfds = c.updateFDs(&readers, &writers);
        if (nfds == 0)   break;
        c.updateTimeout(&tv);
        count = select(nfds, &readers, &writers, NULL, &tv);
        c.process(&readers, &writers);
        std::cout<<"loop"<<std::endl;
    }
}
  • updateFDs()获取频道的 FD
  • updateTimeout()将超时降低到通道所需的时间
  • process()ares_process()

我可以很容易地设置select()等待多个频道,但是当select()返回时,我怎么知道要调用哪个频道ares_process

4

0 回答 0