我有一个 epoll 服务器,它有时会使用主机名表示打开传出连接。由于传入连接流的速率很高,我不想阻止像 getaddrinfo()
或 gethostbyname()
这样的地方。当然,我可以实现一个缓存和一个新线程,在其中执行主机名解析。是否有单线程非阻塞方式将主机名解析为 IP?
最佳答案
为此目的有各种库,例如libevent
包含解析器。
虽然我有点同意@Puciek 的观点,但在单个线程中执行此操作会增加相当多的复杂性以获得可疑的好处。使用专用解析线程并通过管道与其通信可能是最佳解决方案。
既然你提到了 epoll
我猜你正在使用 Linux。它有一个 getaddrinfo_a
函数,如果我理解正确的话,它会为你做一部分。它克隆一个线程并在那里运行 getaddrinfo。我从未使用过它,所以除此之外无能为力。
关于C++ 异步主机名解析,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24527306/