2014-07-02 52 views
0

我有一个epoll服务器,有时会打开传出连接,使用其主机名表示。由于传入连接流量的速度很高,我不想阻止像getaddrinfo()gethostbyname()之类的地方。当然,我可以实现一个缓存加一个新的线程,在那里执行主机名解析。是否有一种单线程非阻塞方式来将主机名解析为IP?C++异步主机名解析

+0

单线程和非阻塞是(几乎)排除对方。如果您没有辅助线程来处理您的工作,您期望在等待数据时不会阻止该工作? –

+0

@Puciek:我认为你排除错了,请参阅'epoll' – pavelkolodin

+0

我几乎这么说,但这不是日常编程的可行解决方案。 IO等待的最简单方法是将你的应用程序线程化,如果你不想这么做的话 - 使它异步,这对于重新设计来说是一件非常痛苦的事情,但是,嘿,你不想要简单的方法! –

回答

1

为此目的有多种库,例如, libevent包含一个解析器。

虽然我在某种意义上认同@Puciek,但是在单线程中这样做会给可疑的好处带来相当大的复杂性。使用专用解析线程并通过管道与其通信可能是最佳解决方案。

既然你提到了epoll我想你正在使用Linux。它有一个getaddrinfo_a函数,如果我理解正确的话,为你做的一部分。它克隆一个线程并在那里运行getaddrinfo。我从来没有使用它,所以无法帮助。

+0

'libevent'如何实现异步名称解析? – pavelkolodin

+0

这是一个名为'evdns'的独立模块。注意:我还没有真正使用过那个。 –