#include <sys.socket.h>
#include <netdb.h>
Kernighan-Ritchie-C:
int getnameinfo (sa, salen, host, hostlen, serv, servlen, flags);
const struct sockaddr *sa;
socklen_t salen;
char *host;
size_t hostlen;
char *serv;
size_t servlen;
int flags;
ANSI-C:
int getnameinfo (const struct sockaddr* sa, socklen_t salen, char* host,
size_t hostlen, char* serv, size_t servlen, int flags);
Beschreibung
Die Funktion getnameinfo() gibt den Namen, der der beim Aufruf angegebenen IP-Adresse und Portnummer zugeordnet ist, als Text-String zurück. Die Werte werden entweder über den DNS-Service oder über systemspezifische Tabellen ermittelt.
Der Parameter sa ist ein Zeiger auf eine sockaddr_in-Struktur (bei IPv4) oder eine sockaddr_in6-Struktur (bei IPv6), die jeweils die IP-Adressen und Portnummern enthalten.salen gibt die jeweilige Länge dieser Strukturen an.
Bei erfolgreicher Ausführung von getnameinfo() ist host ein Zeiger auf den zur angegebenen IP-Adresse korrespondierenden Socket-Hostnamen, der mit dem Null-Byte abgeschlossen wird und dessen Länge dem Wert von hostlen entspricht. Entsprechendes gilt für den zur angegebenen Portnummer korrespondierenden Service-Namen, auf den der Zeiger serv verweist und der inklusive Null-Byte die Länge servlen hat.
Mit dem Wert 0 für hostlen oder servlen beim Aufruf von getnameinfo() wird angezeigt, dass im zugehörigen Parameter host kein Name bzw. im Parameter serv kein Service-Name oder keine Portnummer zurückgeliefert werden soll. Für die gewünschte Information muss aber ein Puffer ausreichender Größe bereitgestellt werden, der Rechner- und Service-Namen inklusive Null-Byte aufnehmen kann.
Spezifikation der maximalen Längen von DNS- und Servicenamen in der Include-Datei <netdb.h>:
|
|
|
|
Der Parameter flags ändert die Art der Ausführung von getnameinfo(), bei dem standardmäßig der vollqualifizierte Domänen-Name des Rechners aus dem DNS ermittelt und zurückgeliefert wird. In Abhängigkeit des Wertes von flags sind folgende Fälle zu unterscheiden:
Wenn das flags-Bit NI_NOFQDN gesetzt ist, wird nur der Rechnernamen-Anteil eines FQDN zurückgeliefert.
Für den Zugang zum DNS wird der für SOCKETS(BS2000), BCAM und POSIX-Sockets gemeinsame Resolver LWRESD genutzt. Näheres siehe Handbuch „BCAM Band 1/2“.
Wenn das flags-Bit NI_NUMERICHOST gesetzt ist oder der Rechnername weder im DNS noch durch lokale Information ermittelt werden kann, wird der numerische Hostname nach Adressumwandlung in abdruckbarer Form zurückgeliefert.
Wenn das flags-Bit NI_NAMEREQD gesetzt ist, wird ein Fehler gemeldet, falls der Rechnername im DNS nicht ermittelt werden kann.
Wenn das flags-Bit NI_NAMEREQD in Kombination mit NI_NOFQDN gesetzt, hat das Bit keine Wirkung.Wenn das flags-Bit NI_NUMERICSERV gesetzt ist, wird anstatt des Service-Namens die Portnummer in abdruckbarer Form zurückgeliefert.
Wenn das flags-Bit NI_DGRAM gesetzt ist, wird der Service-Name für das udp-Protokoll zurückgeliefert. Ohne Angabe von NI_DGRAM wird immer der Service-Name für das tcp-Protokoll zurückgeliefert.
Returnwert
0:
bei Erfolg
>
0:
bei Fehler
Da für den DNS-Resolver Thread-Festigkeit gefordert ist, können keine errnos gesetzt werden.
Wenn der Returnwert > 0 ist, entspricht er dem Wert eines Fehlercodes EAI_xxx, wie sie in <netdb.h> definiert sind.
<0:
bei Fehler
Es ist ein Fehler aufgetreten, der die Ausführung der Funktion verhindert. Deshalb wird errno gesetzt.