getaddrinfo问题

时间:2011-10-09 19:46:40

标签: c++ http sockets proxy benchmarking

我目前正在编写自己的HTTP代理。我有代码工作,但我试图用ApacheBench进行压力测试,发现我不时会得到如下信息:

“getaddrinfo:提供nodename或servname,或者不知道主机en.wikipedia.org服务80”

我无法理解为什么这个函数调用在传递主机名和端口的地方失败。

我已经在网上找到了解决这个问题的不同方法,但没有找到任何有用的方法。

有没有人有任何想法?

修改的 通过在我的应用程序中实现DNS缓存系统解决了这个问题。

2 个答案:

答案 0 :(得分:2)

您的分辨率堆栈中的某些内容可能无法处理您正在进行的查询量吗?

您必须从/etc/nsswitch.conf开始,并查看如何在您的系统上解析查询。在某些时候,您最终会进入本地DNS缓存,如果一次查询的查询太多,也可能会超时。

您可能会发现需要在代理中运行DNS缓存(例如,Squid)或在本地运行DNS缓存,例如lwresd。

答案 1 :(得分:0)

我建议使用像C-ares这样的异步DNS解析库。否则,您将很快发现标准解决方案将如何阻止您的性能,因为它会阻止。