0

最近,我正在开发基于Linux平台(2.6.32)的网络应用程序。我的场景是设备需要定期向服务器发送数据。每次网络代码首先调用函数 getaddinfo() 时,它都会返回服务器 IP 地址,然后我将此值传递给套接字接口或 libcurl api。

但是,我发现如果 /etc/resolv.conf 设置为无效值,例如 nameserver 169.254.1.1,getaddrinfo() 将返回错误值(-3)。即使我将 /etc/resolv.conf 更新为有效值, getaddrinfo() 仍然返回错误。

似乎 getaddrinfo() 函数在第一次调用后不会更新名称服务器值。

我的解决方案是在独立进程(不是线程)中调用 getaddrinfo() 。我发现这是解决上述问题的可行方法。

上述问题的根本原因是什么?

4

1 回答 1

0

似乎这是设计使然,glibc 本身仅读取 resolv.conf 一次 - 如果使用内部解析器。

我相信您可以运行nscd进行解析/缓存,它会获取 resolv.conf 更改。(如果 nscd 正在运行,glibc 会自动联系该守护进程而不是使用其内部解析器)

但是,您可以通过调用res_init () 函数来强制重新读取 resolv.conf 。

于 2013-11-12T13:25:44.473 回答