作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
如果我们的服务器(在设备上运行)在获取 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/
我是一名优秀的程序员,十分优秀!