問題タブ [getaddrinfo-a]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c - getaddrinfo_a を使用して glibc で非同期解決を行う方法
外部ライブラリを必要としない、見落とされがちな機能ですが、基本的にドキュメントは一切ありません。
c++ - getaddrinfo からの応答が遅い
Windows で C++ から DNS クエリを実行するために getaddrinfo を使用しています。以前は Windows API の DnsQuery を使用していましたが、これは問題なく機能していましたが、ソフトウェアに IPv6 サポートを追加するときに getaddrinfo に切り替えました。それ以来、私は次のことを見てきました。
私の問題は、getaddrinfo が完了するまでに非常に長い時間がかかる場合があることです。getaddrinfo からの通常の応答は数ミリ秒かかりますが、およそ 10000 分の 1 の時間で、場合によっては 15 秒程度の時間がかかりますが、数分かかる場合がいくつかあります。
サーバーで Wireshark を実行し、アプリケーションのデバッグ ログを分析したところ、次のように表示されました。
- 関数 getaddrinfo を呼び出します。
- 15 秒後、私のマシンは DNS サーバーにクエリを実行します。
- 数ミリ秒後、DNS サーバーから応答が返ってきます。
ここで奇妙なことに、実際の DNS クエリは 10 分の 1 秒しかかからないのに、getaddrinfo が実際に実行される時間はそれよりもはるかに長くなります。
この問題は多くのユーザーから報告されているため、私のマシンに固有の問題ではありません。
では、getaddrinfo は DNS サーバーに接続する以外に何をするのでしょうか?
編集:
- 複数のアドレスで問題が発生しました。これらのアドレスを使用して問題を再現しようとすると、問題は発生しません。
- 私は愚かなことをしました。DNS クエリごとに、etc/services が解析されます。ただし、それは数分の遅延を説明するものではありません。(ありがとうD.ショーリー)
編集 2
- 私のソフトウェアによって作成される DNS クエリの 1 つのタイプは、アンチスパム DNSBL クエリです。あるユーザーのログによると、ip.address1.example.com の検索には常に正確に 2039 秒かかるように見えましたが、another.ip.address.example.com の検索には常に正確に 1324 秒かかりました。その翌日、これらのアドレスのルックアップはまったく問題ありませんでした。最初は、DNS BL の作成者が何らかのタイムアウトを設定したのではないかと考えていました。しかし、これが中心的な問題だった場合、getaddrinfo はもっと早くタイムアウトするべきでしたか?
c - 複数の valgrind エラー: 条件付きのジャンプまたは移動は、初期化されていない値に依存します
Valgrind を実行していますが、次のエラーが表示されます (これだけではありません)。
私のtunnelURL()
関数は次のようになります(Cコード):
行 336 は、関数呼び出しを含むif
ステートメントに対応します。getaddrinfo()
何を初期化していないのかよくわかりません。「すべき」で渡す文字列は、既に設定されています。ちゃんと印刷してます。同じコード行に対応する別のエラーも表示されます。
これの原因について何か考えはありますか?
objective-c - getaddrinfo中の非常に少数のユーザーのBAD_ACCESS
さて、私はここで完全に途方に暮れています。ごく一部のユーザーは、ホスト名の変換でBAD_ACCESSエラーが発生しているようです。
以下の完全なクラッシュ:
これが私がDNS(重要な部分)を解決するために使用するコードです。私はここで何かが欠けていますか?さらに小切手を追加できますか?ユーザー数が非常に少ないため、何千人ものユーザーに問題はありません。
ホスト名解決コードの一部:[CFNetworkStreamopenBSDSocket::]メソッド
次に、[self getHostAddress:xxxx]メソッドを呼び出します。完全なメソッドの下にあります。
相談してもらえますか?私は本当にここで立ち往生しているようです、なぜそれらの(少ない)ユーザーの数はこのコードの問題を見ていますか?追加のチェックが必要ですか?
私は本当にあなたのヒント/相談を使うことができました。
重要:影響を受けるユーザーは、ネットワークが切断された場合にのみ発生すると述べています。しかし、ネットワーク接続の切断が上記の問題を引き起こす可能性があることを受け入れることはできませんか?
編集:私はリークテストを行いました。DNSの結果を偽造することで長い間(if(retval!= 0))、Macでメモリリークは発生しません。
linux - 関数 getaddrinfo の問題
関数 getaddrinfo を使用して、ドメイン名、OS = linux、言語 = c++ の IP アドレスを取得します。イーサネット ケーブルが取り外されると、関数が 30 秒間スレッドをブロックできることに気付きました (関数は 30 秒以内に戻りません)。私には長すぎます。その関数のタイムアウトを設定したり、関数の実行を中断したり、その他のアイデアを中断したりすることは可能ですか?
ありがとうEB
winapi - WINAPIでホストを解決するためのノンブロッキング方式はありますか?
ホスト解決をブロックするためのgetaddrinfo()
ものがありますが、非ブロック方法はありますか?
c++ - gai_cancel() は成功するまでに非常に長い時間がかかります
C++ でドメインを非同期的に検索しようとしています。その理由は、システムがドメインを検索できない場合に備えて、タイムアウト期間を効果的に追加できるようにしたいからです。getaddrinfo_a() コマンドに出くわしたので、試してみることにしました。ただし、成功しないDNSルックアップ(インターネット接続がない場合など)をキャンセルすると、マシンで20秒以上かかることはありません。これの簡単な例を次に示します。
次のようにコンパイルします。
次に、インターネットに接続していない Linux ベースのシステムで次のようにコマンドを実行します。
プログラムが閉じるのに常に約 20 秒かかることがわかります。どんな助けでも大歓迎です!