2010-11-11 98 views
0

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

顺便说一下,这个问题在一个星期前还没有存在,这是一个新的问题,突然让它变得丑陋的头。我相当肯定,上周我们必须对这台机器做些什​​么,我也试图与其他员工进行验证,但他们也不知道为什么会出现这种情况。

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

+0

难道你不能发布代码示例吗? – 2010-11-11 23:39:40

+0

命令行工具(如“ping”)是否可以正确解析相同的名称? – SimonJ 2010-11-11 23:42:31

回答

1

您使用的是Linux吗?我的猜测是,你已经搞乱了glibc使用的libnss乱七八糟的东西来路由所有名称查找(主机名,用户名,组名等),也许是由于glibc升级而造成的。尝试使用strace运行程序,看看它是否尝试(和失败)打开libnss_*文件。另请参阅​​以确保hosts:行的内容为hosts: files dnsman nsswitch.conf可能会有所帮助。

+0

对不起,我们使用的是Linux(Gentoo),它可能是一个拙劣的glibc升级问题,我会研究一下。谢谢。 – LebowskiT1000 2010-11-11 23:48:57

+0

原来我在做一个很大的假设DOH!我用有问题的函数编写了一个简短的小程序,并且没有任何问题!经过一些更多的搜索和调试后,我发现它是从我正在创建的套接字连接中获得的数据出现问题。对不起,但感谢您的帮助。 – LebowskiT1000 2010-11-12 01:58:25