Ik ben op zoek naar de beste manier om asynchroon dns-queries uit te voeren in C++. Op dit moment heb ik dit geimplementeerd via de c-ares library. Deze doet zijn werk goed en is eenvoudig te integreren in onze even t loop (libev).
Wat ik echter mis in deze library is ondersteuning voor RFC 3484. Ik probeer altijd eerst de IPv6-adressen en als geen daarvan werken dan probeer ik de IPv4-adressen. Dit is natuurlijk niet de bedoeling, stel dat iemand in /etc/gai.conf aangeeft geen gebruik te willen maken van IPv6 dan zou dat gehonoreerd moeten worden.
Een alternatief dat ik heb gevonden zou getaddrinfo_a zijn, deze is asynchroon en geeft de adressen in dezelfde volgorde terug als getaddrinfo. De functie is echter specifiek voor glibc en naar wat ik heb gelezen start deze gewoon doodleuk een extra thread op om daar vervolgens gewoon synchroon een request te doen. Dat schaalt natuurlijk niet lekker.
Zijn er tweakers die al met dit bijltje gehakt hebben? Het zelf parsen van /etc/gai.conf (plus de alternatieven die er zijn op andere besturingssystemen) lijkt me lastig om cross-platform te implementeren. Het makkelijkste en waarschijnlijk het meest portable is om gewoon een thread the starten en daarin getaddrinfo te doen, maar dat resulteert of in een heleboel threads, of een trage een-voor-een resolve bij het afvuren van meerdere dns-requests.
Wat ik echter mis in deze library is ondersteuning voor RFC 3484. Ik probeer altijd eerst de IPv6-adressen en als geen daarvan werken dan probeer ik de IPv4-adressen. Dit is natuurlijk niet de bedoeling, stel dat iemand in /etc/gai.conf aangeeft geen gebruik te willen maken van IPv6 dan zou dat gehonoreerd moeten worden.
Een alternatief dat ik heb gevonden zou getaddrinfo_a zijn, deze is asynchroon en geeft de adressen in dezelfde volgorde terug als getaddrinfo. De functie is echter specifiek voor glibc en naar wat ik heb gelezen start deze gewoon doodleuk een extra thread op om daar vervolgens gewoon synchroon een request te doen. Dat schaalt natuurlijk niet lekker.
Zijn er tweakers die al met dit bijltje gehakt hebben? Het zelf parsen van /etc/gai.conf (plus de alternatieven die er zijn op andere besturingssystemen) lijkt me lastig om cross-platform te implementeren. Het makkelijkste en waarschijnlijk het meest portable is om gewoon een thread the starten en daarin getaddrinfo te doen, maar dat resulteert of in een heleboel threads, of een trage een-voor-een resolve bij het afvuren van meerdere dns-requests.
Ik ontken het bestaan van IE.