dns - 使用 glibc,为什么在 I/DHCP 更改 DNS 服务器后我的 gethostbyname 失败?

标签 dns glibc dhcp

如果我们的服务器(在设备上运行)在获取 DHCP 租约之前启动,那么它永远无法使用主机名进行连接。

如果发生这种情况,它可以通过 IP 地址查找主机,但不能通过 DNS 查找主机。

我最初认为 Curl DNS 缓存有问题,因为curl 连接失败。但我使用CURLOPT_DNS_CACHE_TIMEOUT来阻止curl缓存地址,但连接仍然失败。

最佳答案

事实证明,如果配置发生更改,glibc gethostbyname_r 不会自动重新加载其配置。您必须手动调用 res_init。请参阅bug report下面。

注意:gethostbyname_r 和 rer_init 的手册页均未提及此限制。

我的解决方案非常具体。它适用于我们长期运行的服务器,但它不是我理想的解决方案。

我有一个函数可以根据上次已知的 mtime(DNE 为 0)检查/etc/resolv.conf 的 mtime。如果两个时间 不同的话我调用res_init。该函数在程序启动时调用,然后定期调用以选择性地重新加载配置。

<小时/>

glibc bug report

libc caches resolv.conf forever

...

That's what res_init() is for, call it.

关于dns - 使用 glibc,为什么在 I/DHCP 更改 DNS 服务器后我的 gethostbyname 失败?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/125466/

相关文章:

linux - 如何在 dhcp 数据包中填写 dhcp vendor specific option

c++ - 在 C++ 中将 int 14236 转换为 hex 379C 作为 char[37,9C]

java - 如何在jsp中查找默认网关ip地址

c - C中的DNS服务器返回IP地址和端口号

amazon-web-services - 如何将电子邮件从 godaddy 转移到 AWS

c++ - 插入 std::map 时检测到 glibc(内存错误)

c - 使用 AI_NUMERICHOST 获取地址信息

linux - 如何执行流式字符转换?

build - 构建 glibc : what is wrong with the make/confgure files? 时出错

python-2.7 - Scapy 和 DHCP 安全测试