C getaddrinfo()没有解析名称

时间:2010-11-11 22:51:01

标签: c sockets dns getaddrinfo

我有一个使用getaddrinfo()的程序(用C编写),它的第一个参数是我希望它获取地址信息的主机名,假设它是“域”。在同一台机器上的/etc/hosts文件中,我可以看到“域”应该解析为192.168.1.200。当我运行程序时,它每次都挂起这个调用,无法获取地址信息。但是,如果我用实际的IP地址替换“域”,它就可以正常工作。

顺便说一句,这个问题在大约一周前不存在,这是一个突然出现问题的新问题。我相当肯定在上周必须对这台机器做些什​​么,我试图与其他员工核实这一点,但他们也不知道为什么会这样。

所以,我的问题是,有没有人知道这会突然发生什么?我可以检查什么来验证它是如何配置的?提前谢谢。

1 个答案:

答案 0 :(得分:1)

您使用的是Linux吗?我的猜测是你搞砸了glibc使用libnss混乱的东西来路由它的所有名称查找(主机名,用户名,组名等),也许是通过拙劣的glibc升级。尝试使用strace运行程序,看看它是否正在尝试(并且失败)打开libnss_*个文件。另请查看/etc/nsswitch.conf以确保hosts:行读取hosts: files dnsman nsswitch.conf可能会有所帮助。