getipnodebyname, Subroutine

Zweck

Umsetzung von Knotenname in Adresse.

Bibliothek

Standard-C-Bibliothek (libc.a)

(libaixinet)

Syntax

#include <libc.a>
#include <netdb.h>
struct hostent *getipnodebyname(name, af, flags, error_num)
const char *name;
int af;
int flags;
int *error_num; 

Beschreibung

Die häufig verwendeten Funktionen gethostbyname und gethostbyname2 sind für viele Anwendungen unzureichend. Sie konnten den Typ der gewünschten Adressen in gethostbynamenicht angeben. In gethostbyname2ist eine globale Option (RES_USE_INET6) erforderlich, wenn IPV6 -Adressen verwendet werden. Außerdem benötigte gethostbyname2 mehr Kontrolle über den Typ der erforderlichen Adressen.

Die Subroutine getipnodebyname gibt dem Aufrufenden mehr Kontrolle über die erforderlichen Adresstypen und ist threadsicher. Außerdem ist keine globale Option wie RES_USE_INET6erforderlich.

Das Namensargument kann entweder ein Knotenname oder eine numerische Adresse (entweder eine IPv4 -Adresse in der Schreibweise mit Trennzeichen oder eine IPv6-Adresse mit Doppelpunkten als Trennzeichen) sein.

Die Flags -Parameterwerte sind AI_DEFAULT, AI_V4MAPPED, AI_ALL und AI_ADDRCONFIG. Der Sondermarkierwert AI_DEFAULT ist für die Verarbeitung der meisten Anwendungen konzipiert. Seine Definition lautet:
#define AI_DEFAULT (AI_V4MAPPED | AI_ADDRCONFIG)
Wenn Sie einfache Anwendungen für die Verwendung von IPv6portieren, ersetzen Sie einfach den Aufruf:
hp = gethostbyname(name);
mit
hp = getipnodebyname(name, AF_INET6, AI_DEFAULT, &error_num);

Um das Verhalten der Subroutine getipnodebyname zu ändern, können konstante Werte logisch mit dem Parameter Flags verknüpft werden.

Der Wert 0 für flags impliziert eine strenge Interpretation des Parameters af . Wenn af AF_INET ist, werden nur IPv4 -Adressen gesucht und zurückgegeben. Wenn af den Wert AF_INET6 hat, werden nur IPv6 -Adressen gesucht und zurückgegeben.

Wenn das Flag AI_V4MAPPED zusammen mit einem af von AF_INET6angegeben wird, akzeptiert der Aufrufende IPv4-mapped IPv6 -Adressen. Das heißt, wenn eine Abfrage für IPv6 -Adressen fehlschlägt, wird eine Abfrage für IPv4 -Adressen durchgeführt und wenn Adressen gefunden werden, werden sie als IPv4-mapped IPv6 -Adressen zurückgegeben. Das Flag AI_V4MAPPED ist nur mit dem af AF_INET6gültig.

Wenn das Flag AI_ALL in Verbindung mit dem Flag AI_V4MAPPED verwendet wird und af auf AF_INET6gesetzt ist, wünscht der Aufrufende alle Adressen. Die zurückgegebenen Adressen sind IPv6 -Adressen und/oder IPv4-mapped IPv6 -Adressen. Nur wenn beide Abfragen (IPv6 und IPv4) fehlschlagen, gibt getipnodebyname NULL zurück. Auch hier ist das Flag AI_ALL nur gültig, wenn af auf AF_INET6gesetzt ist.

Mit dem Flag AI_ADDRCONFIG wird angegeben, dass eine Abfrage für IPv6 -Adressen nur erfolgen soll, wenn für den Knoten mindestens eine IPv6 -Quellenadresse konfiguriert ist, und eine Abfrage für IPv4 -Adressen nur erfolgen soll, wenn für den Knoten mindestens eine IPv4 -Quellenadresse konfiguriert ist. Wenn für den Knoten beispielsweise nur IPv4 -Adressen konfiguriert sind, af gleich AF_INET6ist und der gesuchte Knotenname sowohl IPv4 -als auch IPv6 -Adressen enthält, gibt getipnodebyname den Wert NULL zurück, wenn nur das Flag AI_ADDRCONFIG angegeben ist. Wenn das Flag AI_V4MAPPED mit dem Flag AI_ADDRCONFIG (AI_DEFAULT) angegeben wird, werden alle gefundenen IPv4 -Adressen als IPv4-mapped IPv6 -Adressen zurückgegeben.

Es gibt vier verschiedene Situationen, wenn das Namensargument eine Literaladresszeichenfolge ist:
  1. name ist eine IPv4 -Adresse in Schreibweise mit Trennzeichen und af ist AF_INET. Wenn die Abfrage erfolgreich ist, zeigt h_name auf eine Kopie von name, h_addrtype ist das Argument af , h_length ist 4, h_aliases ist ein Nullzeiger, h_addr_list[0] verweist auf die 4-Byte-Binäradresse und h_addr_list[1] ist ein Nullzeiger.
  2. Name ist eine durch Doppelpunkte getrennte IPv6 -Adresse und af ist AF_INET6. Wenn die Abfrage erfolgreich ist, zeigt h_name auf eine Kopie von name, h_addrtype ist der af -Parameter, h_length ist 16, h_aliases ist ein Nullzeiger, h_addr_list[0] verweist auf die 16 Byte lange Binäradresse und h_addr_list[1] ist ein Nullzeiger.
  3. name ist eine IPv4 -Adresse in der Schreibweise mit Trennzeichen und af ist AF_INET6. Wenn das Flag AI_V4MAPPED angegeben ist und die Abfrage erfolgreich ist, zeigt h_name auf eine IPv4-mapped IPv6 -Adresszeichenfolge. h_addrtype ist das Argument af , h_length ist 16, h_aliases ist ein Nullzeiger, h_addr_list[0] verweist auf die 16-Byte-Binäradresse und h_addr_list[1] ist ein Nullzeiger.
  4. Name ist eine durch Doppelpunkte getrennte IPv6 -Adresse und af ist AF_INET. Dies ist ein Fehler, getipnodebyname gibt einen Nullzeiger zurück und error_num entspricht HOST_NOT_FOUND.

Parameter

Element Beschreibung
Name Gibt entweder einen Knotennamen oder eine numerische Adresse (entweder eine IPv4 -Adresse in der Schreibweise mit Trennzeichen oder eine durch Doppelpunkte getrennte IPv6-Adresse) an.
AF Gibt die Adressfamilie an, die entweder AF_INET oder AF_INET6ist.
Flags Steuert die Typen der gesuchten Adressen und die Typen der zurückgegebenen Adressen.
fehlernummer Gibt das Argument mit dem entsprechenden Fehlercode an den Aufrufenden zurück.

Rückgabewerte

Die Subroutine getipnodebyname gibt bei Erfolg einen Zeiger auf eine hostent -Struktur zurück.

Die Subroutine getipnodebyname gibt einen Nullzeiger zurück, wenn ein Fehler auftritt. Der Parameter error_num gibt den Fehler an.

Fehlercodes

Element Beschreibung
HOST_NICHT_GEFUNDEN Der mit dem Parameter Name angegebene Host wurde nicht gefunden.
TRY_AGAIN Der lokale Server hat keine Antwort von einem maßgeblichen Server empfangen. Versuchen Sie es zu einem späteren Zeitpunkt erneut.
NO_RECOVERY Der mit dem Parameter Nameangegebene Host wurde nicht gefunden. Dieser Fehlercode gibt einen nicht behebbaren Fehler an.
KEINE_ADRESSE Der angeforderte Name ist gültig, hat jedoch keine Internetadresse auf dem Namensserver.