?
hustbaer schrieb:
(Bzw. ich würde vermutlich sogar zwei neue funktionen machen. Eine die nur versucht zu parsen, und wenn das fehlschlägt einfach nur "leider nicht" zurückliefert. Und dann die oben erwähnte Funktion mit Hilfe der neuen parse_direct Funktion implementieren.)
int dns_get_first_optional_parsing(/*bla*/)
{
int error_code;
uri_object host_info;
/*Prüfe, ob IP geladen werden konnte - bei != 0 gibt es immer einen Fehler.*/
if(!uri_parse(&host_info,hostname,hostname_length))
{
/*Konnte geparst werden, Informationen zuweisen und dann zurückkehren*/
(*output_sockaddr) = host_info.ip_address_info;
return 0;
}
/*DNS-Request*/
if((error_code = dns_get_first(/*bla*/)))
{
return error_code;
}
/*Keine IP, konnte aber durch DNS aufgelöst werden.*/
return 0;
}
Meinst du das so?
hustbaer schrieb:
Dieser Teil liest sich jetzt irgendwie so als ob du da irgend ein Problem siehst. Ich verstehe aber nicht welches.
Beispiel: Caller möchte eine SOCKS-Verbindung aufmachen, gibt an: "127.0.0.1:9050", AF_INET, aber macht aus irgendeinem Grund statt eine TCP- eine UDP-Verbindung. Durch einen DNS-Lookup käme heraus, dass UDP gar nicht unterstützt werden würde (getaddrinfo liefert da jeweils andere Ergebnisse, zumindest, als ich es getestet habe). Da ich den Lookup aber nicht mache, würde mir keine Fehlermeldung zurückkommen, sondern ich würde in der Funktion die Socket-Adresse bauen, und die Funktion gibt keinen Fehler zurück. Der Caller speichert das Ergebnis irgendwo zwischen - sagen wir mal, in einen Speicher, der für verschiedene Threads (nur Read-Only) verwendet wird. Und wundert sich später, warum der DNS-Lookup funktioniert, aber das Verbinden nicht.
Im Gegensatz dazu die sock_connect-Funtion - Verzichtet auf den DNS-Lookup, baut die Adresse lokal, aber verbindet sich direkt und wirft eine Fehlermeldung. Da weiß der Caller schon sehr viel eher, was Sache ist, und kann direkt beim Call ansetzen.
Vielleicht bin ich auch nur Paranoid - aber wenn man für sowas schon ein API zusammenbaut, dann auch bitte richtig. Das soll schließlich noch in Jahren stehen.
hustbaer schrieb:
Bzw. falls es nur um den Teil "beim DNS-Code würde der Nutzer sich eher darauf verlassen, dass ein neuer DNS-Request gemacht wird" geht, das bliebe in der von mir vorgeschlagenen Variante ja weiterhin so. D.h. Client Code könnte immer den garantierten DNS Lookup bekommen wenn Client Code das will.
Da hast du recht - am Interface würde sich nichts ändern, nur am Funktionsnamen.