2011-10-09 29 views
0

我目前正在编写自己的HTTP代理。我有代码工作,但我试图用ApacheBench进行压力测试,发现我现在每隔一段时间就会收到一条消息,如下所示:getaddrinfo问题

“getaddrinfo:节点名或服务器名已提供,或者未知主机en.wikipedia。组织服务80“

我不能找出为什么这个函数调用会失败的主机名和端口传递。

我已经在网上寻找不同的方法来解决这个问题,并没有发现任何有用的东西。

有没有人有任何想法?

编辑 通过在我的应用程序中实现DNS缓存系统解决了此问题。

回答

2

也许你的分辨率堆栈中的某些东西不能处理你正在查询的数量?

您必须以​​开头,然后查看您的系统上的查询是如何解决的。在某些时候,你最终会到达你的本地DNS缓存,如果它一次查询太多,也可能会超时。

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

+0

+1:超负荷DNS服务器或UDP堆栈是相当容易的。最重要的是,为了防止拒绝服务攻击,许多DNS服务器每个IP都有一个速率限制器,以便一个IP不会使系统过载。 –

0

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