我目前正在编写自己的HTTP代理。我有代码工作,但我试图用ApacheBench进行压力测试,发现我不时会得到如下信息:
“getaddrinfo:提供nodename或servname,或者不知道主机en.wikipedia.org服务80”
我无法理解为什么这个函数调用在传递主机名和端口的地方失败。
我已经在网上找到了解决这个问题的不同方法,但没有找到任何有用的方法。
有没有人有任何想法?
修改的 通过在我的应用程序中实现DNS缓存系统解决了这个问题。
答案 0 :(得分:2)
您的分辨率堆栈中的某些内容可能无法处理您正在进行的查询量吗?
您必须从/etc/nsswitch.conf
开始,并查看如何在您的系统上解析查询。在某些时候,您最终会进入本地DNS缓存,如果一次查询的查询太多,也可能会超时。
您可能会发现需要在代理中运行DNS缓存(例如,Squid)或在本地运行DNS缓存,例如lwresd。
答案 1 :(得分:0)
我建议使用像C-ares这样的异步DNS解析库。否则,您将很快发现标准解决方案将如何阻止您的性能,因为它会阻止。