Provided by: manpages-de-dev_1.11-1_all 

BEZEICHNUNG
gethostbyname, gethostbyaddr, sethostent, gethostent, endhostent, h_errno, herror, hstrerror,
gethostbyaddr_r, gethostbyname2, gethostbyname2_r, gethostbyname_r, gethostent_r - ermittelt den
Netzwerkeintrag für einen Host
ÜBERSICHT
#include <netdb.h>
extern int h_errno;
struct hostent *gethostbyname(const char *name);
#include <sys/socket.h> /* für AF_INET */
struct hostent *gethostbyaddr(const void *addr,
socklen_t len, int type);
void sethostent(int stayopen);
void endhostent(void);
void herror(const char *s);
const char *hstrerror(int err);
/* System V/POSIX-Erweiterung */
struct hostent *gethostent(void);
/* GNU-Erweiterungen */
struct hostent *gethostbyname2(const char *name, int af);
int gethostent_r(
struct hostent *ret, char *buf, size_t buflen,
struct hostent **result, int *h_errnop);
int gethostbyaddr_r(const void *addr, socklen_t len, int type,
struct hostent *ret, char *buf, size_t buflen,
struct hostent **result, int *h_errnop);
int gethostbyname_r(const char *name,
struct hostent *ret, char *buf, size_t buflen,
struct hostent **result, int *h_errnop);
int gethostbyname2_r(const char *name, int af,
struct hostent *ret, char *buf, size_t buflen,
struct hostent **result, int *h_errnop);
Mit Glibc erforderliche Makros (siehe feature_test_macros(7)):
gethostbyname2(), gethostent_r(), gethostbyaddr_r(), gethostbyname_r(), gethostbyname2_r():
_BSD_SOURCE || _SVID_SOURCE
herror(), hstrerror():
Seit Glibc 2.8:
_BSD_SOURCE || _SVID_SOURCE
Vor Glibc 2.8:
keine
h_errno:
Seit Glibc 2.12:
_BSD_SOURCE || _SVID_SOURCE ||
(_POSIX_C_SOURCE < 200809L && _XOPEN_SOURCE < 700)
Bis Glibc 2.12:
keine
BESCHREIBUNG
Die Funktionen gethostbyname*(), gethostbyaddr*(), herror() und hstrerror() sind obsolet. Anwendungen
sollten stattdessen getaddrinfo(3), getnameinfo(3) und gai_strerror(3) verwenden.
Die Funktion gethostbyname() gibt eine Struktur vom Typ hostent für den angegebenen Host name zurück.
Darin ist name entweder ein Host-Name oder eine IPv4-Adresse in der Standard-Punktnotation. Falls name
eine IPv4-Adresse ist, wird nicht gesucht und gethostbyname() kopiert einfach nur den namen und dessen
Äquivalent struct in_addr in das Feld h_addr_list[0] der zurückgegebenen hostent-Struktur. Falls name
nicht mit einem Punkt endet und die Umgebungsvariable HOSTALIASES gesetzt ist, wird zuerst die von
HOSTALIASES bestimmte Aliasdatei nach dem namen durchsucht (siehe hostname(7) für das Dateiformat). Falls
der name nicht mit einem Punkt endet, werden die aktuelle Domain und ihre übergeordneten Domains
durchsucht.
Die Funktion gethostbyaddr() gibt für die angegebene Adresse addr eine Struktur vom Typ hostent mit der
Länge len und dem Adresstyp type zurück. Gültige Adresstypen sind AF_INET und AF_INET6. Das Argument addr
ist ein Zeiger auf eine Struktur, die vom Adresstyp abhängt, beispielsweise eine struct in_addr *
(möglicherweise ermittelt durch einen Aufruf von inet_addr(3)) für den Adresstyp AF_INET.
Die Funktion sethostent() legt fest, falls stayopen wahr (1) ist, dass ein bestehende TCP-Verbindung für
Nameserveranfragen genutzt werden soll und dass die Verbindung für die nachfolgenden Anfragen offen
bleiben soll. Ansonsten werden für Nameserveranfragen UDP-Datagramme benutzt.
Die Funktion endhostent() beendet die Nutzung einer TCP-Verbindung für Namerserveranfragen.
Die Funktion herror() gibt die zum aktuellen Wert von h_errno gehörende Fehlermeldung auf stderr aus.
Die obsolete Funktion hstrerror() ermittelt zu einer Fehlernummer (normalerweiseh_errno) die zugehörige
Zeichenkette mit der Fehlermeldung.
The domain name queries carried out by gethostbyname() and gethostbyaddr() rely on the Name Service
Switch (nsswitch.conf(5)) configured sources or a local name server (named(8)). The default action is to
query the Name Service Switch (nsswitch.conf(5)) configured sources, failing that, a local name server
(named(8)).
Geschichtliches
The nsswitch.conf(5) file is the modern way of controlling the order of host lookups.
In glibc 2.4 and earlier, the order keyword was used to control the order of host lookups as defined in
/etc/host.conf (host.conf(5)).
Die Struktur hostent ist in <netdb.h> wie folgt definiert:
struct hostent {
char *h_name; /* offizieller Name des Rechners */
char **h_aliases; /* Aliasliste */
int h_addrtype; /* Host-Adresstyp */
int h_length; /* Länge der Adresse */
char **h_addr_list; /* Adressliste */
}
#define h_addr h_addr_list[0] /* für Abwärtskompatibilität */
Die Elemente der hostent-Struktur sind:
h_name der offizielle Name des Rechners
h_aliases
ein Null-terminiertes Feld mit den alternativen Namen des Rechners
h_addrtype
der Adresstyp, z.Zt. immer AF_INET oder AF_INET6
h_length
die Länge der Adresse in Bytes
h_addr_list
ein Null-terminiertes Feld von Zeigern auf Netzwerkadressen für den Rechner (in der
Netzwerk-Bytereihenfolge), gefolgt von einem Null-Zeiger
h_addr die erste Adresse in h_addr_list, für Abwärtskompatibilität
RÜCKGABEWERT
Die Funktionen gethostbyname() und gethostbyaddr() geben eine hostent-Struktur zurück. Bei einem Fehler
wird ein Null-Zeiger zurückgegeben, in diesem Fall enthält die Variable h_errno die Fehlernummer. Falls
der Zeiger von NULL verschieden ist, kann der Rückgabewert auf statische Daten weisen; siehe die
folgenden Anmerkungen.
FEHLER
Die Variable h_errno kann folgende Werte annehmen:
HOST_NOT_FOUND
Der angegebene Rechner ist unbekannt.
NO_DATA
The requested name is valid but does not have an IP address. Another type of request to the name
server for this domain may return an answer. The constant NO_ADDRESS is a synonym for NO_DATA.
NO_RECOVERY
Ein nichtbehebbarer Nameserverfehler ist aufgetreten.
TRY_AGAIN
Beim maßgebenden Nameserver ist ein vorübergehender Fehler aufgetreten. Versuchen Sie es später
noch einmal.
DATEIEN
/etc/host.conf
Konfigurationsdatei des Resolvers (Namensauflöser)
/etc/hosts
Host-Datenbankdatei
/etc/nsswitch.conf
Konfigurationsdatei für »name service switch«
ATTRIBUTE
Siehe attributes(7) für eine Erläuterung der in diesem Abschnitt verwandten Ausdrücke.
┌────────────────────┬───────────────────────┬───────────────────────────────┐
│ Schnittstelle │ Attribut │ Wert │
├────────────────────┼───────────────────────┼───────────────────────────────┤
│ gethostbyname() │ Multithread-Fähigkeit │ MT-Unsafe race:hostbyname env │
│ │ │ locale │
├────────────────────┼───────────────────────┼───────────────────────────────┤
│ gethostbyaddr() │ Multithread-Fähigkeit │ MT-Unsafe race:hostbyaddr env │
│ │ │ locale │
├────────────────────┼───────────────────────┼───────────────────────────────┤
│ sethostent(), │ Multithread-Fähigkeit │ MT-Unsafe race:hostent env │
│ endhostent(), │ │ locale │
│ gethostent_r() │ │ │
├────────────────────┼───────────────────────┼───────────────────────────────┤
│ herror(), │ Multithread-Fähigkeit │ MT-Safe │
│ hstrerror() │ │ │
├────────────────────┼───────────────────────┼───────────────────────────────┤
│ gethostent() │ Multithread-Fähigkeit │ MT-Unsafe race:hostent │
│ │ │ race:hostentbuf env locale │
├────────────────────┼───────────────────────┼───────────────────────────────┤
│ gethostbyname2() │ Multithread-Fähigkeit │ MT-Unsafe race:hostbyname2 │
│ │ │ env locale │
├────────────────────┼───────────────────────┼───────────────────────────────┤
│ gethostbyaddr_r(), │ Multithread-Fähigkeit │ MT-Safe env locale │
│ gethostbyname_r(), │ │ │
│ gethostbyname2_r() │ │ │
└────────────────────┴───────────────────────┴───────────────────────────────┘
In the above table, hostent in race:hostent signifies that if any of the functions sethostent(3),
gethostent(3), gethostent_r(3), or endhostent(3) are used in parallel in different threads of a program,
then data races could occur.
KONFORM ZU
POSIX.1-2001 beschreibt gethostbyname(), gethostbyaddr(), sethostent(), endhostent(), gethostent() und
h_errno; gethostbyname(), gethostbyaddr() und h_errno sind in diesem Standard als allmählich außer
Gebrauch kommend gekennzeichnet.POSIX.1-2008 entfernt die Beschreibungen von gethostbyname(),
gethostbyaddr() nd h_errno und empfiehlt stattdessen die Verwendung von getaddrinfo(3) und
getnameinfo(3).
ANMERKUNGEN
Die Funktionen gethostbyname() und gethostbyaddr() können Zeiger auf statische Daten zurückgeben, welche
bei späteren Aufrufen überschrieben werden könnten. Das Kopieren von struct hostent ist nicht
ausreichend, weil sie Zeiger enthält. Es ist ein »tiefes Kopieren« erforderlich.
In der ursprünglichen BSD-Implementierung von gethostbyname() war das Argument len ein int. Der Standard
SUSv2 ist fehlerhaft und weist dem Argument len von gethostbyaddr() den Typ size_t zu. (Das ist falsch,
weil es int sein muss und das für size_t nicht der Fall ist. POSIX.1-2001 macht es zusocklen_t, was in
Ordnung ist.) Siehe auch accept(2).
Der BSD-Prototyp für gethostbyaddr() verwendet const char * als Datentyp für das erste Argument.
System V/POSIX-Erweiterung
POSIX verlangt den Aufruf von gethostent(), welcher den nächsten Eintrag in der Host-Datenbank
zurückgeben sollte. Bei der Verwendung von DNS/BIND macht das nicht viel Sinn, aber es kann sinnvoll
sein, wenn die Host-Datenbank eine Datei ist, die Zeile für Zeile gelesen werden kann. Auf vielen
Systemen liest eine Routine mit diesem Namen aus der Datei /etc/hosts. Sie ist nur verfügbar, wenn die
Bibliothek ohne DNS-Unterstützung gebaut wurde. Die Glibc-Version ignoriert Ipv6-Einträge. Diese Funktion
ist nicht ablaufinvariant. Glibc stellt die ablaufinvariante Version gethostent_r() bereit.
GNU-Erweiterungen
Glibc2 enthält auch gethostbyname2(), welche wie gethostbyname() arbeitet, ermöglicht aber die Vorgabe
der Adressfamilie, zu der die Adresse gehören muss.but permits to specify the address family to which the
address must belong.
Glibc2 hat auch ablaufinvariante Versionen von gethostent_r(), gethostbyaddr_r(), gethostbyname_r() und
gethostbyname2_r(). Der Aufrudende stellte eine hostent-Struktur ret, die bei Erfolg ausgefüllt wird, und
einen temporären Arbeitspuffer buf der Größe buflen bereits. Nach dem Aufruf zeigt bei Erfolg result zu
dem Ergebnis. Im Falle eines Fehlers oder wenn kein Eintrag gefunden wird, ist result NULL. Die
Funktionen liefern 0 bei Erfolg und bei einem Fehler eine von null verschiedene Fehlernummer. Zusätzlich
zu den Fehlern, die von den nicht ablaufinvarianten Versionen dieser Funktionen zurückgegeben werden,
melden dieses Funktionen den Fehler ERANGE, falls buf zu klein war. In diesem Fall sollte der Aufruf mit
einem größeren Puffer wiederholt werden. Die globale Variable h_errno wird nicht verändert, aber die
Adresse einer Variablen zur Speicherung von Fehlernummern wird in h_errnop übergeben.
FEHLER
gethostbyname() erkennt in IPv4-Adresszeichenketten in Punktnotation keine Bestandteile in hexadezimaler
Notation.
SIEHE AUCH
getaddrinfo(3), getnameinfo(3), inet(3), inet_ntop(3), inet_pton(3), resolver(3), hosts(5),
nsswitch.conf(5), hostname(7), named(8)
KOLOPHON
Diese Seite ist Teil der Veröffentlichung 4.04 des Projekts Linux-man-pages. Eine Beschreibung des
Projekts, Informationen, wie Fehler gemeldet werden können sowie die aktuelle Version dieser Seite finden
sich unter http://www.kernel.org/doc/man-pages/.
ÜBERSETZUNG
Die deutsche Übersetzung dieser Handbuchseite wurde von Martin Eberhard Schauer <Martin.E.Schauer@gmx.de>
erstellt.
Diese Übersetzung ist Freie Dokumentation; lesen Sie die GNU General Public License Version 3 oder neuer
bezüglich der Copyright-Bedingungen. Es wird KEINE HAFTUNG übernommen.
Wenn Sie Fehler in der Übersetzung dieser Handbuchseite finden, schicken Sie bitte eine E-Mail an
<debian-l10n-german@lists.debian.org>.
23. Juli 2015 GETHOSTBYNAME(3)