2 Stimmen

Frage zur Funktion getaddrinfo() in der Socket-Programmierung

Nachfolgend ein Beispiel für den Aufruf von getaddrinfo()

status = getaddrinfo("www.example.net","1234", &hints, &server_info);

Danach verweist die server_info auf eine verknüpfte Liste mit allen möglichen Adressinformationen.

Ich habe die folgenden Fragen:

Da ich den Hostnamen und die Anschlussnummer eindeutig angegeben habe, sind die einzigen Adressinformationen, die mir einfallen, IPv4- und IPv6-Adressen. Die Länge der verknüpften Liste sollte also 2 betragen. Gibt es daneben noch andere Arten von Adressinformationen?

Gracias.

4voto

Dean Harding Punkte 69243

Der Name kann zu mehr als einer IPv4- oder IPv6-Adresse aufgelöst werden, es gibt keinen Hinweis darauf, dass nur eine Es wird zum Beispiel eine IPv4-Adresse zurückgegeben (versuchen Sie es zum Beispiel mit "www.google.com", Sie werden wahrscheinlich mehr als eine IPv4-Adresse erhalten).

Aber in jedem Fall halte ich die Grundannahme Ihrer Frage für falsch. Selbst wenn es keine Möglichkeit gäbe, mehr als eine IPv4- und eine IPv6-Adresse zurückzugeben heute ist die Funktion so dokumentiert, dass sie eine beliebig lange verknüpfte Liste von addrinfo Objekte. Selbst wenn Ihr Code heute in jeder Situation funktioniert, gibt es daher keine Garantie, dass er auch morgen noch funktioniert. Wenn die Funktion nachweislich eine beliebig lange verknüpfte Liste zurückgibt, müssen Sie in der Lage sein, damit umzugehen.

0voto

Michael Hunter Punkte 414

Sie möchten die physische Konfiguration von Rechnern mit Namen in Ihrem Kopf trennen. DNS ordnet lediglich einen Namen einer Reihe von Adressen zu. Viele Hosts werden nur eine Schnittstelle haben. Viele Hosts werden mehrere haben (Multihoming genannt). DNS kümmert sich nicht um die Konfiguration des Rechners oder der Rechner, denen die Adressen zugeordnet sind, denen es einen Namen zuordnet. Als einfaches Beispiel hat ein Server oft Schnittstellen in mehreren Netzen mit unterschiedlichen Adressen, die alle demselben Namen zugeordnet sind. Wenn man Dienste von verschiedenen Rechnern auf einen zusammenfasst, werden manchmal verschiedene Namen auf dieselbe Adresse abgebildet. Gehen Sie also nicht von einer 1:1-Zuordnung zwischen Namen und Rechnern und schon gar nicht von Schnittstellen aus.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X