gethostbyname与11004错误 分析原因

前几天调试一个程序获取本机IP地址,发现总是返回WSANO_DATA (11004)错误,很是奇怪,因为几百台机器测试测试,就一台出,后来终于找到原因,具体分析如下:

错误原因:
WSANO_DATA (11004) Valid name, no data record of requested type.
请求的名字合法并且在数据库中找到了,但它没有正确的关联数据用于解析。此错误的通常例子是主机名到地址(使用gethostbyname()或WSAAsyncGetHostByName()函数)的DNS转换请求,返回了MX(Mail eXchanger)记录但是没有A(Address)记录,它指示主机本身是存在的,但是不能直接到达。

1.首先在网上找到很多类似问题的解释如下:
今天在使用gethostbyname解析域名到IP地址的时候遇到了11004错误,根据错误号查找错误文本为”请求的名称有效并且在数据库中找到,但是它没有相关的正确的数据来被解析。后来发现用ping又是可以解析域名的,郁闷了许久,还是没有头绪。后来无意中我把域名的协议后”http://”去掉竟然神奇地可以解析了,不过对于一些大型的网站不去协议头还是可以解析的,可能跟web服务器配置有关吧。
参考网址:http://blog.csdn.net/cackeme/article/details/7825744
分析:由于我是获取本机的IP,直接传入的参数为本机的计算机名字,根本不存在上面的情况,所以情况上面说的情况不适合我。
2.继续研究,因为我程序中有很多地方并发检查网络情况,既然都是跟网络相关的函数,是不是相互影响。终于在一步一步注释代码的情况下找到了-internetcheckconnection,判断当前是否正在联网的函数。由于我在调用internetcheckconnection函数时的参数格式为”http://www.abc.com/ab.html“,正如WSANO_DATA 原因的描述,跟DNS转换有关,我把internetcheckconnection的参数改成”www.abc.com/ab.html”就可以了,这样两边就不互相影响了。
3.通过上面调试发现internetcheckconnection不支持”www.abc.com/ab.html”格式,参数必须带”http”,所以上面说的方法还是不行,最后只能通过调用命令行的方式获取ip地址了,下面的总结是没有问题的。

总结:现在发现网络函数多线程并发的情况下,有相互影响internetcheckconnection跟gethostbyname,internetcheckconnection跟getaddrinfo。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值