Langsame Antwort von getaddrinfo

Ich verwende getaddrinfo, um DNS-Abfragen von C ++ unter Windows durchzuführen. Ich habe früher die Windows-API DnsQuery verwendet und das hat gut funktioniert, aber als ich meiner Software IPv6-Unterstützung hinzufügte, bin ich auf getaddrinfo umgestiegen. Seitdem habe ich Folgendes gesehen:

Mein Problem ist, dass getaddrinfo manchmal sehr lange dauert. Die typische Antwort von getaddrinfo dauert nur wenige Millisekunden, aber ungefähr 1 Mal von 10000 dauert es länger, in einigen Fällen um 15 Sekunden, aber es gab mehrere Fälle, in denen es mehrere Minuten dauert.

Ich habe Wireshark auf dem Server ausgeführt, die Debug-Protokolle meiner Anwendungen analysiert und Folgendes angezeigt:

Ich rufe die Funktion getaddrinfo auf.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 ausführt, ist viel länger.

Das Problem wurde von vielen Benutzern gemeldet, es ist also nichts Spezielles für meinen Computer.

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

Bearbeiten:

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

Bearbeiten 2

Eine Art von DNS-Abfragen, die von meiner Software durchgeführt werden, sind DNSBL-Antispamabfragen. Das Protokoll eines Benutzers zeigte mir, dass die Suche nach ip.address1.example.com immer genau 2039 Sekunden dauerte, während die Suche nach another.ip.address.example.com immer genau 1324 Sekunden dauerte. Am Tag danach war die Suche nach diesen Adressen in Ordnung. Zuerst dachte ich, dass die DNS BL-Autoren eine Art Timeout auf ihre Seite gelegt hatten. Aber wenn dies das Kernproblem war, hätte getaddrinfo früher eine Zeitüberschreitung haben sollen?

Antworten auf die Frage(1)

Ihre Antwort auf die Frage