有getaddrinfo()
用于阻塞主机解析,但有非阻塞方法吗?
4 回答
Linux 有getaddrinfo_a()
. 请参阅 StackOverflow 标记getaddrinfo-a,例如这个问题 "How to use getaddrinfo_a to do async resolve with glibc"。但我想这不适用于 Windows。
有一个用于异步 DNS 请求的跨平台库c-ares,据说它在 Windows 上运行。(我自己没试过。)
我不认为有这样的事情,但你总是可以将它包装在一个线程中并使用信号量来表示完成。
从GetAddrInfoEx上的MSDN 页面,OVERLAPPED
参数显示:
在 Windows 7 和 Windows Server 2008 R2 或更早版本上,此参数当前是保留的,并且必须设置为NULL,因为不支持异步操作。
这意味着您只能OVERLAPPED
在 Windows 8 和更新版本中使用该功能。除非史蒂夫可以证明它可以在旧版本的 Windows 中工作......
在 Windows Vista 和 Windows Server 2008 中,您可以使用带有OVERLAPPED结构的GetAddrInfoEx 。
在结构hEvent
中设置事件后,OVERLAPPED
使用GetAddrInfoExOverlappedResult。