我们的应用程序(RHEL 5 / c ++)使用gethostid
返回的hostid进行日志记录。出于某种原因,本地网络环境的主DNS服务器脱机。这导致了gethostid
中的大量问题:函数调用挂起超过60秒,这导致我们的应用程序内部超时。几分钟后,命令行上对hostid
的调用也没有返回。一旦DNS服务器再次启动,应用程序和hostid
命令行工具中的超时/问题就会消失。
我的问题是:如何阻止gethostid
进行DNS查找?答案有一些边界条件:
/etc/hostid
不得存在。sethostid
。/etc/hosts
。我很惊讶这种情况发生了。据我了解gethostid
,它的工作原理如下:
sethostid
的值。我不认为需要DNS查询。
要验证gethostid
实际上是否依赖于正在运行的DNS服务器,请尝试以下操作:
nameserver
条目。hostid
。在我的debian / squeeze安装中,这导致00000000
的hostid没有任何挂起。我假设hostid
的RedHat版本不同/更旧,结果会挂起。
答案 0 :(得分:0)
我认为,如果不破坏系统或违反其中一个边界条件,就无法阻止gethostid
的DNS查找。在gnu.org我发现了sethostid
函数的评论:
建立系统主IP地址的正确方法是配置IP地址解析程序,将该IP地址与gethostname返回的系统主机名相关联。例如,将系统记录放在/ etc / hosts中。
由此我得出结论,gethostid
确定了这样的IP:
gethostname
获取主机名。gethostbyname
(或类似方法)确定IP。在条件下,主机名与/etc/hosts
中的IP地址无关,而/etc/nsswitch.conf
允许DNS查找,gethostid
将进行DNS查找。