我正在尝试在 C++ 中异步查找域。原因是我希望能够有效地添加超时时间,以防系统无法查找域。我遇到了 getaddrinfo_a() 命令,所以我决定试一试。但是,在我的机器上取消任何不会成功的 dns 查找(例如没有互联网连接时)永远不会少于 20 秒。这是一个简单的例子:
#include <iostream>
#include <netdb.h>
#include <string.h>
#include <unistd.h>
using namespace std;
int main() {
int ret;
gaicb* reqs;
reqs = new gaicb;
memset(reqs, 0, sizeof (gaicb));
reqs->ar_name = "google.com";
ret = getaddrinfo_a(GAI_NOWAIT, &reqs, 1, NULL);
if (ret != 0) {
cout << "something went wrong" << endl;
return false;
}
while (1) {
ret = gai_cancel(reqs);
if (ret == EAI_CANCELED || ret == EAI_ALLDONE) {
break;
}
usleep(100 * 1000); //sleep for 100 milliseconds
}
cout << "finished cancellation" << endl;
return 0;
}
像这样编译:
g++ -o main main.cpp -lanl
然后在没有互联网连接的情况下在基于 linux 的系统上运行命令,如下所示:
time ./main
你会发现程序总是需要大约 20 秒才能关闭。任何帮助将不胜感激!