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.
#define AI_DEFAULT (AI_V4MAPPED | AI_ADDRCONFIG)hp = gethostbyname(name);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.
- name ist eine IPv4 -Adresse in Schreibweise mit Trennzeichen und af ist AF_INET. Wenn die Abfrage erfolgreich ist, zeigt
h_nameauf eine Kopie von name,h_addrtypeist das Argument af ,h_lengthist 4,h_aliasesist ein Nullzeiger,h_addr_list[0]verweist auf die 4-Byte-Binäradresse undh_addr_list[1]ist ein Nullzeiger. - Name ist eine durch Doppelpunkte getrennte IPv6 -Adresse und af ist AF_INET6. Wenn die Abfrage erfolgreich ist, zeigt
h_nameauf eine Kopie von name,h_addrtypeist der af -Parameter,h_lengthist 16,h_aliasesist ein Nullzeiger,h_addr_list[0]verweist auf die 16 Byte lange Binäradresse undh_addr_list[1]ist ein Nullzeiger. - 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_nameauf eine IPv4-mapped IPv6 -Adresszeichenfolge.h_addrtypeist das Argument af ,h_lengthist 16,h_aliasesist ein Nullzeiger,h_addr_list[0]verweist auf die 16-Byte-Binäradresse undh_addr_list[1]ist ein Nullzeiger. - 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. |