|
Beschreibung
Die Funktion getnameinfo() gibt den Namen, welcher der beim Aufruf angegebenen IP-Adresse und Portnummer zugeordnet ist, als Text-String zurück. Die Werte werden entweder über den in SOCKETS(BS2000) integrierten DNS-Resolver von einem DNS-Server oder über systemspezifische Tabellen ermittelt.
Der Parameter sa ist ein Zeiger auf eine sockaddr-Struktur, die die IP-Adresse und Portnummer enthält. Das tatsächliche Format der sockaddr-Struktur hängt von der Adressfamilie ab und ist im Abschnitt "Socket-Adressierung" beschrieben. Das exakte Format von *
sa wird durch die Domäne bestimmt, in der die Kommunikation stattfindet. salen gibt die Länge dieser Struktur an.
Nach erfolgreicher Ausführung sind host bzw. serv Zeiger auf zwei Bereiche in denen der entsprechende Socket-Hostname bzw. Servicename stehen (mit Null-Byte abgeschlossen). Die Längen der Bereiche sind in hostlen bzw. servlen anzugeben. Diese müssen groß genug sein, um den Socket-Hostnamen bzw. den Servicenamen (einschließlich Null-Byte) zu speichern. Wird für hostlen oder servlen beim Aufruf der Wert Null angegeben, dann wird angezeigt, dass der Socket-Hostname oder der Servicename nicht zurückgeliefert werden soll.
Die maximalen Längen von Socket-Host- und Servicenamen sind in der Include-Datei <netdb.h> definiert:
#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:
NI_NOFQDN
Es soll nur der Rechnernamen-Anteil des vollen DNS-Namens (Socket-Hostname) zurückgeliefert werden.
NI_NUMERICHOST
Es soll der numerische Hostname nach Adressumwandlung in abdruckbarer Form zurückgeliefert werden. Dasselbe ist der Fall, wenn der Rechnername weder im DNS noch durch lokale Information ermittelt werden kann und NI_NAMEREQD nicht gesetzt ist.
NI_NAMEREQD
Es soll ein Fehler gemeldet werden, falls der Rechnername im DNS nicht ermittelt werden kann.
NI_NUMERICSERV
Anstatt des Servicenamens soll die Portnummer in abdruckbarer Form zurückgeliefert werden.
Returnwert
0:
Bei Erfolg.
<> 0:
Bei Fehler.
Fehler
EAFNOSUPPORT
Die Funktion wird an diesem System nicht unterstützt. Vergleichen Sie dazu auch den Abschnitt "Abhängigkeiten vom BS2000-Transportsystem BCAM".
EINVAL
Ungültige Adressfamilie im Parameter sa angegeben oder die Längen der Ausgabebereiche host bzw. serv sind zu klein.