2011-10-09 55 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解析庫。否則,您會很快發現標準解決方案將如何殺死您的性能,因爲它會阻止。