私は 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
か?