2012-02-21 13 views
1

私のコードでは、次のようにコードを使用しています。EAI_AGAINでgetaddrinfo()が連続的に失敗する

do 
{ 
    r = getaddrinfo(host, service, &hints, ret); 
} 
while (r == EAI_AGAIN); 

のgetaddrinfoをテスト()連続従ってループに失敗していない正常終了します。

コードを改善する方法はありますか?ループする回数をカウントするためにcounterを使用できますか?

また、「EAI_AGAIN」がgetaddrinfo()呼び出しによって返されたすべての理由をお知らせください。

+0

メモリがリークしていますか? –

+3

エラーの意味:名前解決に一時的な障害が発生しました。なぜそれがあなたのために起こるか知ることは不可能です。我々はあなたが渡すパラメータについて何も知らない。ビジーなループでこれを呼び出すと、結果が得られない可能性があります。 –

+0

これは、ほとんどのDNSサーバーが到達不能/停止しているか、DNSが誤って構成されていることを意味します。 – Nemo

答えて

0

これは、確かに、野生の推測です。

また、これはやや弱いシングルコア組み込みシステムでも見られます。

(私たちの場合はdnsmasq)は別のプロセスで動作していると仮定しています。なぜなら、(おそらく私たちのテールを追い回っているサークルで走っているからです)リソースが十分にはありません。 ..)その仕事をする。

解決策の野生の推測は、そのタイトなループに睡眠を入れ、DNSキャッシングマジックを自分の仕事をするために必要なリソースに置くことでしょう。

動作するかどうかをお知らせします。

関連する問題