最近,我正在开发基于Linux平台(2.6.32)的网络应用程序。
我的情况是设备需要定期将数据发送到服务器。
每次网络代码首先调用函数getaddinfo()时,它将返回服务器IP地址,然后将此值传递给套接字接口或libcurl api。
但是,我发现如果/etc/resolv.conf设置为无效值,例如名称服务器169.254.1.1,则getaddrinfo()将返回错误值(-3)。即使我将/etc/resolv.conf更新为有效值,getaddrinfo()仍会返回错误。
第一次调用后,似乎getaddrinfo()函数不会更新名称服务器的值。
我的解决方案是在一个独立的进程(不是线程)中调用getaddrinfo()。我发现这是解决上述问题的可行方法。
上述问题的根本原因是什么?
最佳答案
看来这是设计使然,如果使用内部解析器,则glibc本身仅读取一次resolv.conf。
我相信您可以运行nscd进行解析/缓存,它将获取resolv.conf的更改。 (如果nscd正在运行,则glibc会自动联系该守护程序,而不是使用其内部解析程序)
但是,您可以通过调用res_init()函数来强制重新读取resolv.conf。
关于linux - 在Linux平台上调用getaddrinfo()函数的问题,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/19930037/