当前位置:  技术问答>linux和unix

gethostbyname非阻塞还是自己设计dns?

    来源: 互联网  发布时间:2016-07-31

    本文导语:  由于我要做个网络爬虫,用到gethostbyname这个函数,这个是阻塞的函数,对于大型的系统不适合,请问有什么方法可以解决这种阻塞呢?还是说自己设计dns解析系统?有没有什么参考到书目阿 什么的,去百度看了下都...

由于我要做个网络爬虫,用到gethostbyname这个函数,这个是阻塞的函数,对于大型的系统不适合,请问有什么方法可以解决这种阻塞呢?还是说自己设计dns解析系统?有没有什么参考到书目阿 什么的,去百度看了下都是些100多k的dns程序,太恐怖了……我只想获得ip……

对于那种 用alarm来控制 阻塞的方法 我也用了,开始还行,到后面就会出现错误,具体错误我这个帖子指出了,还望各位大侠能给与一定的指导或提示:
http://topic.csdn.net/u/20100113/17/a21b1527-0d87-409b-bf7f-58f82efccc01.html?seed=421973476&r=62735821#r_62735821

|
很简单,你实现一下dns的协议,UDP协议的,可以搜一下dns的RFC文档看,这个协议应该不会很复杂。
无非就是丢几个包过去,再接收回应。如果看文档不能理解的话可以调用系统的gethostbyname函数再抓包分析,对照着看。
其实gethostbyname也并非是完全阻塞的,它应该也是有超时的。超过一段时间解析不到便会返回,这个时间你可以测试一下,可能有几分钟,可能也没那么长。

|
我在想难道你自己写个DNS
效率就会比gethostbyname高吗?

|
不过gethostbyname得到的结果是报存在静态存储区的,也许有影响

|

用alarm应该完全没有问题的。
我不明白的是楼主为什么要用siglongjmp,alarm后,超时一到,gethostbyname_r就会返回错误
http://topic.csdn.net/u/20100113/17/a21b1527-0d87-409b-bf7f-58f82efccc01.html?seed=421973476&r=62735821#r_62735821
虽然楼主没有贴全部代码,还是在楼主的这个帖子里发现一点问题,在get_ip里有malloc,但是没有free.
sourceid的例子里也没有,不妨看看是不是这个问题。

    
 
 
 
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • 关于gethostbyname弱爆了,救命啊
  • 急,gethostbyname_r,gcc编译时要指定特别的库吗?
  • 程序中使用gethostbyname出现段错误
  • #请问nslookup和程序中使用gethostbyname为什么结果不同?
  • gethostbyname
  • 关于/etc/resolv.conf和gethostbyname
  • 关于中断gethostbyname的问题
  • 域名解析gethostbyname,错误:Host name lookup failure
  • linux网络编程中gethostbyname、gethostbyaddr函数的用法
  • 初学者求救:gethostbyname的应用,看看看错在哪里?谢谢。。。
  • 关于linux socket下的gethostbyname()这个函数的IP问题
  • 有没有什么方法使gethostbyname和connect这些行为能够超时结束?
  • gethostbyname所得ip不能使用
  • 不显示删除回复显示所有回复显示星级回复显示得分回复 ubuntu10.04 安装 mysql4.0 源码出错,提示gethostbyname_r的参数数量不对
  • linux获取主机名后用gethostbyname() 不能获取主机ip
  • 一个gethostbyname的疑问
  • [进者有分]c 中gethostbyname()的源代码是什么?
  • mysql iis7站长之家
  • gethostbyname_r内部出错到问题


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3