Langsame Antwort von getaddrinfo

8

Ich verwende getaddrinfo, um DNS-Abfragen von C ++ unter Windows auszuführen. Früher habe ich die Windows API DnsQuery verwendet, und das hat gut funktioniert, aber als ich meine Software um IPv6-Support erweiterte, wechselte ich zu getaddrinfo. Seitdem habe ich Folgendes gesehen:

Mein Problem ist, dass einige Zeit getaddrinfo sehr lange dauern, um abzuschließen. Die typische Antwort von getaddrinfo dauert nur ein paar Millisekunden, aber etwa 1 von 10000, es dauert länger, in einigen Fällen etwa 15 Sekunden, aber es gibt mehrere Fälle, wenn es mehrere Minuten dauert.

Ich habe Wireshark auf dem Server ausgeführt und die Debug-Protokolle meiner Anwendungen analysiert und folgendes festgestellt:

  • Ich rufe die Funktion getaddrinfo.
  • 15 Sekunden später fragt mein Computer den DNS-Server ab.
  • Einige Millisekunden später erhalte ich die Antwort vom DNS-Server.

Das Seltsame dabei ist, dass die eigentliche DNS-Abfrage nur eine Zehntelsekunde dauert, aber die Zeit, die getaddrinfo tatsächlich ausgeführt wird, ist viel länger.

Das Problem wurde von vielen Benutzern gemeldet, daher handelt es sich nicht um etwas, das für meinen Computer spezifisch ist.

Was macht getaddrinfo also mehr, als den DNS-Server zu kontaktieren?

Bearbeiten:

  • Das Problem ist bei mehreren Adressen aufgetreten. Wenn ich versuche, das Problem mit diesen Adressen zu reproduzieren, tritt das Problem nicht auf.
  • Ich habe etwas Dummes getan. Nach jeder DNS-Abfrage wird die etc / services analysiert. Dies erklärt jedoch nicht eine Verzögerung von mehreren Minuten. (Danke D. Shawley)

Bearbeiten Sie 2

  • Eine Art von DNS-Abfragen, die von meiner Software erstellt werden, sind Anti-Spam-DNSBL-Abfragen. Das Protokoll von einem Benutzer zeigte mir, dass die Suche nach ip.address1.example.com immer exakt 2039 Sekunden dauerte, während die Suche nach another.ip.address.example.com immer exakt 1324 Sekunden dauerte. Am nächsten Tag war die Suche nach diesen Adressen in Ordnung. Zuerst dachte ich, dass die DNS-BL-Autoren eine Art Timeout auf ihrer Seite hatten. Aber wenn das das Kernproblem ist, sollte getaddrinfo früher abgelaufen sein?
Nitramk 22.11.2009, 12:17
quelle

1 Antwort

3

Windows verfügt über einen lokalen Daemon, der DNS-Caching durchführt. Ihr Aufruf von getaddrinfo () wird an diesen Daemon weitergeleitet, der vermutlich seinen Cache überprüft, bevor er die Abfrage an Ihren DNS-Server sendet.

Weitere Informationen zum Deaktivieren des Cache finden Sie im Windows Knowledge Base-Artikel 318803 .

[Bearbeitet]

Es klingt für mich so, als ob Ihre Windows Server 2003-Instanz nicht korrekt für IPv6 konfiguriert ist. Sobald die IPv6-Lookups abgelaufen sind, wird auf IPv4 zurückgegriffen. Zu den Knowledge Base-Artikeln, die hilfreich sein könnten, gehören:

Leider habe ich keinen Zugriff auf Windows Server, daher kann ich das selbst nicht testen / replizieren.

    
Craig Trader 22.11.2009 12:36
quelle