当前位置: 技术问答>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
对于那种 用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也并非是完全阻塞的,它应该也是有超时的。超过一段时间解析不到便会返回,这个时间你可以测试一下,可能有几分钟,可能也没那么长。
无非就是丢几个包过去,再接收回应。如果看文档不能理解的话可以调用系统的gethostbyname函数再抓包分析,对照着看。
其实gethostbyname也并非是完全阻塞的,它应该也是有超时的。超过一段时间解析不到便会返回,这个时间你可以测试一下,可能有几分钟,可能也没那么长。
|
我在想难道你自己写个DNS
效率就会比gethostbyname高吗?
效率就会比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的例子里也没有,不妨看看是不是这个问题。