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

redhumor 2010-01-14 09:42:47
由于我要做个网络爬虫,用到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
...全文
600 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
redhumor 2010-01-21
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 mymtom 的回复:]
引用 5 楼 redhumor 的回复:
引用 3 楼 deep_pro 的回复:
不过gethostbyname得到的结果是报存在静态存储区的,也许有影响

我用的是 gethostbyname_r哦 所以 不存在你说的那个问题,现在 就是等待的时间让人很不爽

用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的例子里也没有,不妨看看是不是这个问题。
[/Quote]
我返回的时候处理了 这个了,嘿嘿 那个 错误的问题 是出在gethostbyname_r那儿吧…… 因为 debug的内容是这么指示的呢……
mymtom 2010-01-19
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 redhumor 的回复:]
引用 3 楼 deep_pro 的回复:
不过gethostbyname得到的结果是报存在静态存储区的,也许有影响

我用的是 gethostbyname_r哦 所以 不存在你说的那个问题,现在 就是等待的时间让人很不爽
[/Quote]
用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的例子里也没有,不妨看看是不是这个问题。
redhumor 2010-01-17
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 deep_pro 的回复:]
不过gethostbyname得到的结果是报存在静态存储区的,也许有影响
[/Quote]
我用的是 gethostbyname_r哦 所以 不存在你说的那个问题,现在 就是等待的时间让人很不爽
redhumor 2010-01-17
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 fang0625 的回复:]
很简单,你实现一下dns的协议,UDP协议的,可以搜一下dns的RFC文档看,这个协议应该不会很复杂。
无非就是丢几个包过去,再接收回应。如果看文档不能理解的话可以调用系统的gethostbyname函数再抓包分析,对照着看。
其实gethostbyname也并非是完全阻塞的,它应该也是有超时的。超过一段时间解析不到便会返回,这个时间你可以测试一下,可能有几分钟,可能也没那么长。
[/Quote]
有啥推荐的东西看不…… 看来我太多东西不知道了……
deep_pro 2010-01-15
  • 打赏
  • 举报
回复
不过gethostbyname得到的结果是报存在静态存储区的,也许有影响
deep_pro 2010-01-15
  • 打赏
  • 举报
回复
我在想难道你自己写个DNS
效率就会比gethostbyname高吗?
fang0625 2010-01-14
  • 打赏
  • 举报
回复
很简单,你实现一下dns的协议,UDP协议的,可以搜一下dns的RFC文档看,这个协议应该不会很复杂。
无非就是丢几个包过去,再接收回应。如果看文档不能理解的话可以调用系统的gethostbyname函数再抓包分析,对照着看。
其实gethostbyname也并非是完全阻塞的,它应该也是有超时的。超过一段时间解析不到便会返回,这个时间你可以测试一下,可能有几分钟,可能也没那么长。

23,121

社区成员

发帖
与我相关
我的任务
社区描述
Linux/Unix社区 应用程序开发区
社区管理员
  • 应用程序开发区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧