socket getaddrinfo():error11001:No such host is known(找不到这样的主机)

时间:2022-10-05 20:35:06
下面的是贴过来的简介

int getaddrinfo( const char *hostname, const char *service, const struct addrinfo *hints, struct addrinfo **result );
参数说明
hostname:一个主机名或者地址串(IPv4的点分十进制串或者IPv6的16进制串)
service:服务名可以是十进制的端口号,也可以是已定义的服务名称,如ftp、http等
hints:可以是一个空指针,也可以是一个指向某个addrinfo结构体的指针,调用者在这个结构中填入关于期望返回的信息类型的暗示。举例来说:如果指定的服务既支持TCP也支持UDP,那么调用者可以把hints结构中的ai_socktype成员设置成SOCK_DGRAM使得返回的仅仅是适用于数据报套接口的信息。
result:本函数通过result指针参数返回一个指向addrinfo结构体链表的指针。
返回值:0——成功,非0——出错


问题出在了第一个参数hostname上,现象如下:
当hostname是ip时,一个节点的多个进程,多个节点的多个进程都没有问题。

当hostname是主机名,比如“windows_A”,“windows_B”,进程在同一个节点机器即ip相同的机器上时,如都在“windows_A”的节点上,getaddrinfo()可正确解析地址

当hostname是主机名,进程在不同节点时,如分别在主机名为“windows_A”,“windows_B”的节点时,getaddrinfo()则不能正确解析地址,返回11001错误代码,通过查getlasterror列表可知是:“找不到这样的主机!”

请问“找不到这样的主机!”这个问题的原因是什么?如何解决??

谢谢

10 个解决方案

#1


写主机名的话就是走DNS了,你要找的hostname是否真实存在于你的路由能表出的互联网上?

#2


引用 1 楼 Vegertar 的回复:
写主机名的话就是走DNS了,你要找的hostname是否真实存在于你的路由能表出的互联网上?


我是在两个节点上,分别安装了一个虚拟机,虚拟机之间能ping通,feiQ也能发消息,虚拟机均使用的桥接,但两个虚拟机是自动获取的ip(在两个网段)。

#3


你能用域名ping通吗?ping hostname

#4


引用 3 楼 Vegertar 的回复:
你能用域名ping通吗?ping hostname

ping ip可以,hostname不通

#5


Bingo !

因为你的路由表就没这个主机路径。或者你自己修改DNS cache,显示定义ip - domain的映射。

改/etc/hosts

#6


引用 5 楼 Vegertar 的回复:
Bingo !

因为你的路由表就没这个主机路径。或者你自己修改DNS cache,显示定义ip - domain的映射。

改/etc/hosts

非常感谢您耐心回复,我的是windows,目前是内网,自动获取的ip,ping hostname时,不同网段不可以ping通,相同网段可以ping通
目前我一个解决办法是把虚拟机挪到相同网段上,不知道您有没有好的建议

再次感谢

#7


你能ping通baidu,那是因为人家的域名是花了钱的,运营商在某一个网络节点上给它加上了DNS映射,说白了也是手动改系统配置,然后各种BGP,就走到你们的网关上了。
你们内网的话,也得手动加,加到路由器或主机上。至于windows下怎么改,抱歉。

#8


引用 7 楼 Vegertar 的回复:
你能ping通baidu,那是因为人家的域名是花了钱的,运营商在某一个网络节点上给它加上了DNS映射,说白了也是手动改系统配置,然后各种BGP,就走到你们的网关上了。
你们内网的话,也得手动加,加到路由器或主机上。至于windows下怎么改,抱歉。

谢谢啦,内网要改路由器很麻烦,因为管理员负责,我现在windows下设置NetBIOS缓存内容,马上快解决了,非常感谢您啦!

#9


改/etc/hosts,/etc/hosts,/hosts,……(←回声效果)

#10


最后修改的C:\WinNT\System32\Drivers\Etc\lmhosts.sam,添加类似linux下的/etc/hosts 主机名到ip映射
详细请参考我总结的博客http://blog.csdn.net/nohackccc/article/details/11977889
再次感谢各位

#1


写主机名的话就是走DNS了,你要找的hostname是否真实存在于你的路由能表出的互联网上?

#2


引用 1 楼 Vegertar 的回复:
写主机名的话就是走DNS了,你要找的hostname是否真实存在于你的路由能表出的互联网上?


我是在两个节点上,分别安装了一个虚拟机,虚拟机之间能ping通,feiQ也能发消息,虚拟机均使用的桥接,但两个虚拟机是自动获取的ip(在两个网段)。

#3


你能用域名ping通吗?ping hostname

#4


引用 3 楼 Vegertar 的回复:
你能用域名ping通吗?ping hostname

ping ip可以,hostname不通

#5


Bingo !

因为你的路由表就没这个主机路径。或者你自己修改DNS cache,显示定义ip - domain的映射。

改/etc/hosts

#6


引用 5 楼 Vegertar 的回复:
Bingo !

因为你的路由表就没这个主机路径。或者你自己修改DNS cache,显示定义ip - domain的映射。

改/etc/hosts

非常感谢您耐心回复,我的是windows,目前是内网,自动获取的ip,ping hostname时,不同网段不可以ping通,相同网段可以ping通
目前我一个解决办法是把虚拟机挪到相同网段上,不知道您有没有好的建议

再次感谢

#7


你能ping通baidu,那是因为人家的域名是花了钱的,运营商在某一个网络节点上给它加上了DNS映射,说白了也是手动改系统配置,然后各种BGP,就走到你们的网关上了。
你们内网的话,也得手动加,加到路由器或主机上。至于windows下怎么改,抱歉。

#8


引用 7 楼 Vegertar 的回复:
你能ping通baidu,那是因为人家的域名是花了钱的,运营商在某一个网络节点上给它加上了DNS映射,说白了也是手动改系统配置,然后各种BGP,就走到你们的网关上了。
你们内网的话,也得手动加,加到路由器或主机上。至于windows下怎么改,抱歉。

谢谢啦,内网要改路由器很麻烦,因为管理员负责,我现在windows下设置NetBIOS缓存内容,马上快解决了,非常感谢您啦!

#9


改/etc/hosts,/etc/hosts,/hosts,……(←回声效果)

#10


最后修改的C:\WinNT\System32\Drivers\Etc\lmhosts.sam,添加类似linux下的/etc/hosts 主机名到ip映射
详细请参考我总结的博客http://blog.csdn.net/nohackccc/article/details/11977889
再次感谢各位