Я новичок в библиотеке 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()
получает FDs для каналаupdateTimeout()
снижает время ожидания до того, что требуется каналуprocess()
является ares_process()
Я могу легко настроить select()
ждать нескольких каналов, но когда select()
возвращает, как я могу сказать, какой канал позвонить ares_process
на?
Задача ещё не решена.
Других решений пока нет …