gpt4 book ai didi

linux - gethostbyname_r() 调用始终返回的不可解析主机,并将 h_errnop 设置为 TRY_AGAIN(在 Ubuntu 19.04 和 20.04 上)

转载 作者:行者123 更新时间:2023-12-04 18:43:38 26 4
gpt4 key购买 nike

    while(do_again) {

rc = gethostbyname_r(host, &hbuf, tmp, TMPLEN, &hp, &my_h_errno);
if (rc != 0) {
if(my_h_errno == TRY_AGAIN) {
printf("HOST NOT FOUND: got a TRY_AGAIN response from gethostbyname_r()\n");
continue;
} else if (my_h_errno == HOST_NOT_FOUND) {
printf("HOST NOT FOUND: Got an authoritative answer\n");
exit(0);
} else {
printf("Other errors..\n");
exit(0);
}
}
do_again = false;
}
上面的代码总是返回 my_h_errno设置为 TRY_AGAIN用于 Ubuntu 19.04 和 20.04 上不可解析的主机名。在以前版本的操作系统或其他 Linux 风格上,它通常返回更权威的版本, HOST_NOT_FOUND .
调用 ( gethostbyname_r) 究竟是如何工作的?最新版本的 Ubuntu 上的 dns 或查找机制是否有任何变化导致这种行为?

最佳答案

[更新]
安装 libnss-myhostname 作为主机名解析的后备机制,解决了这个问题。
对 glibc 代码的调试使我达到了调用上述库函数(如果存在)的地步,其中 h_errno 设置为 HOST_NOT_FOUND 用于不可解析的主机。对于这种情况,最初在 glibc 的 gethostbyname_r 功能中将其设置为 TRY_AGAIN。

关于linux - gethostbyname_r() 调用始终返回的不可解析主机,并将 h_errnop 设置为 TRY_AGAIN(在 Ubuntu 19.04 和 20.04 上),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64252437/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com