Winsock异步转换域名到IP的一个需要注意的地方

4条评论 2014-12-06 admin

        转换域名到IP是网络编程中使用的很频繁的功能,一般情况下gethostbyname即可,但这个函数是阻塞的,如果你的网络程序框架是基于异步的(例如消息socket、完成端口等),那么可能需要一个异步的函数。微软本身提供了一个异步的函数叫WSAAsyncGetHostByName,调用的时候,需要提供一个窗口的句柄和消息定义,当异步返回的时候,会触发该窗口的消息。问题在于,这个函数是顺序的。举个例子:你按顺序查询www.163.com、www.sina.com……,假如前面的163没有返回,实际上后面的sina也需要等待。也就是说,它其实是按顺序查询的。或许针对每个查询新建一个窗口来接收消息可以避免这个问题,感兴趣的朋友可以尝试一下。另外一个解决方案是自己构造DNS查询包来实现异步查询功能。

分类:网络相关

4条评论 发表评论

  • 111111111说道:

    解析域名一般都是需要得到IP因为一般下面代码是用这个IP的吧?比如connect,异步的话你IP可能都没出来如何connect?异步有何作用?所以感觉意义不大

    • admin说道:

      还是有用处的。具体请参考Delphi自带的ScktComp.pas。
      另外补充一点,gethostbyname本身就是阻塞的,所以文中“或许针对每个查询新建一个窗口来接收消息可以避免这个问题”是没办法的,目前看来最好的办法还是直接DNS了。实际上,迅雷就是直接自己用UDP进行DNS查询的。

  • 子墨居士说道:

    记得很早以前该站应该叫藏鲸阁吧?

  • as说道:

    懒鬼,快快快更新。

发表评论

(必填)

(必填), (Hidden)

XHTML: You can use these tags: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

TrackBack URL  |  这篇文章上的评论的RSS feed


近期文章

近期评论

文章归档

分类目录