Your Browser is not longer supported

Please use Google Chrome, Mozilla Firefox or Microsoft Edge to view the page correctly
Loading...

{{viewport.spaceProperty.prod}}

getnameinfo() - Namen des Kommunikationspartners abfragen

&pagelevel(4)&pagelevel

#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>:

#define NI_MAXHOST

1025

#define NI_MAXSERV

32

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.