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:
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:
Bearbeiten Sie 2
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.
Tags und Links c++ windows performance dns getaddrinfo-a