【问题标题】:Asynchronous address resolution in winsock?winsock中的异步地址解析?
【发布时间】:2010-12-16 02:52:11
【问题描述】:

查看winsock 中的异步地址解析,似乎只有两个选项是在单独的线程上使用阻塞gethostbyname,或者使用WSAAsyncGetHostByName。后者出于某种原因被设计用于处理窗口消息,而不是重叠的操作和完成端口/例程。

是否有任何版本的 gethostbyname 可以以类似于其余 winsock API 的方式与重叠操作异步工作?

【问题讨论】:

  • 这样设计的“某些原因”是 Winsock 是在 Win16 世界中创建的,没有线程或控制台模式程序。 (有 DOS 程序,但它们无法访问 Winsock,除非通过诡计。)所有 Windows 程序都有一个 GUI,或者至少是一个消息循环,操作系统通过它告诉程序已经发生的事情。在那个世界中,通过这种机制通知完成的名称查找是有意义的。

标签: asynchronous winsock gethostbyname


【解决方案1】:

不幸的是,目前还没有,尽管GetAddrInfoEx() 通过所有“常规”路由(包括 IOCP)为异步操作提供了所有正确操作的占位符,所以我希望最终会有......不幸的是,在这次,文档说所有这些都必须设置为 NULL 并标记为“保留”。 :(

我正要写一个(已经有一段时间了)...不幸的是WSAAsyncGetHostByName 甚至不允许并发名称解析,所以它作为我想要的基础毫无用处;但是,话又说回来,因为它不处理 IPv6,这也使它对我来说毫无用处。我希望我会从头开始;可能使用this(啤酒器)之类的东西作为基础。

【讨论】:

  • 当心,您链接到的第二个库是 GPL 的。
  • 好地方沃伦。我还没有跟进它。我昨晚才在谷歌上搜索。
  • @LenHolgate 您可能想要更新您的答案。从 Windows 8 开始,GetAddrInfoEx 的 Unicode 版本确实支持异步操作。
  • 谢谢,知道这很有用。
【解决方案2】:

抱歉,gethostbyname() 没有重叠版本。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多