0

私はCでweb-spiderプログラムを書いています.今、私はURLのリストを与えられています.最初に function: を使ってサーバーのIPアドレスを取得する必要があります.getaddrinfoそして、ばかげたことが起こりました.

URL のリストには約 4,000,000 の URL があり、最初の約 6,000 の URL は非常にうまく処理され、その後突然、後ろのすべての URL が失敗しました。getaddrinfoすべての URL に対して「名前解決の一時的な失敗」を返します。さらに、最初の「悪い」URL からプログラムを再起動すると、再び機能します。

私は本当に混乱して 2 日間立ち往生しています。DNS はうまく機能しているように感じましたが、いくつかの限られたリソースが使い果たされています。

4

3 に答える 3

4

DNS サーバーで何らかのレート制限に達している可能性があります。すべてのネットワークの問題と同様に、Wireshark を実行します。失敗している DNS 要求が実際に送信されているかどうかを確認し、送信されている場合は、どのような応答が得られているかを確認します。

于 2012-04-04T09:46:48.860 に答える
2

freeaddrinfo()返された住所情報を呼び出していますか? 非常に基本的ですが、コードを表示していないため、頭に浮かぶ最初の理論です。

于 2012-04-04T09:47:15.943 に答える
0

あなたの ISP は、ワームのように振る舞っているという理由であなたのスパイダーを殺したのではないかと思います。

PowerDNS recursor などのローカル DNS recursor を実行することを検討してください。これは、既に取得された情報のキャッシュを提供でき、ルックアップを完全に実行します。ISPが提供するDNS サーバーに依存しないため、レート制限の可能性が低くなります。 ISP の機器がプログラムに影響します。

于 2012-04-04T09:47:23.010 に答える