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