Check alle échte Black Friday-deals Ook zo moe van nepaanbiedingen? Wij laten alleen échte deals zien

[C++] Asynchroon getaddrinfo, RFC 3484

Pagina: 1
Acties:

  • cyberstalker
  • Registratie: September 2005
  • Niet online

cyberstalker

Eersteklas beunhaas

Topicstarter
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.

Ik ontken het bestaan van IE.


  • farlane
  • Registratie: Maart 2000
  • Laatst online: 22-11 15:12
Een simpele select( ... ) / poll( ... ) op meerdere sockets die gelijktijdig queries uitvoeren is geen oplossing?

Somniferous whisperings of scarlet fields. Sleep calling me and in my dreams i wander. My reality is abandoned (I traverse afar). Not a care if I never everwake.


  • cyberstalker
  • Registratie: September 2005
  • Niet online

cyberstalker

Eersteklas beunhaas

Topicstarter
Dit is was ik met c-ares doe. Die hebben inderdaad het DNS-protocol geimplementeerd via callbacks die vanuit een event loop kunnen worden aangeroepen.

Deze library heeft echter geen ondersteuning voor RFC 3484 en ook geen oplossing voor de platform-specifieke configuratieinstellingen (zoals /etc/gai.conf). Het is dus bij lange na geen perfecte oplossing. Als iemand op een linux-bak instelt bij voorkeur via IPv4 te connecten (bijvoorbeeld omdat IPv6 via een tunnel loopt en daardoor trager is) dan wordt dat niet gehonoreerd.

Hier zoek ik dus een oplossing voor. Ik vraag me af of iemand anders dit probleem herkent en hoe daarmee is omgegaan.

Ik ontken het bestaan van IE.