Provided by:
manpages-pl-dev_20060617-1_all 
NAZWA
gethostbyname, gethostbyaddr, sethostent, endhostent, herror, hstrerror
- zwróć wpis sieciowy komputera
SKŁADNIA
#include <netdb.h>
extern int h_errno;
struct hostent *gethostbyname(const char *nazwa);
#include <sys/socket.h> /* dla AF_INET */
struct hostent *gethostbyaddr(const char *adres,
int dlug, int typ);
void sethostent(int stayopen);
void endhostent(void);
void herror(const char *s);
const char *hstrerror(int err);
/* rozszerzenia GNU */
struct hostent *gethostbyname2(const char *nazwa, int af);
int gethostbyname_r (const char *nazwa,
struct hostent *ret, char *buf, size_t buflen,
struct hostent **result, int *h_errnop);
int gethostbyname2_r (const char *nazwa, int af,
struct hostent *ret, char *buf, size_t buflen,
struct hostent **result, int *h_errnop);
OPIS
Funkcja gethostbyname() dla danego komputera nazwa zwraca strukturę
typu hostent. Nazwa jest tutaj albo nazwą komputera, albo adresem IPv4
w standardowej notacji z kropkami, albo adresem IPv6 w notacji ze
średnikami (i być może kropkami). (Proszę przeczytać RFC 1984, aby
uzyskać opis adresów IPv6). Jeżeli nazwa jest adresem Ipv4 lub IPv6,
to gethostbyname() nie wykonuje żadnych sprawdzeń i po prostu kopiuje
nazw do pola h_name oraz jej odpowiednik struct in_addr do pola
h_addr_list[0] zwracanej struktury hostent. Jeżeli nazwa nie kończy
się kropką oraz ustawiono zmienną środowiskową HOSTALIASES, to
wyszukiwanie nazwy zacznie się od pliku z aliasami, wskazywanego przez
HOSTALIASES. (format tego pliku opisany jest w hostname(7)). Bieżąca
domenta i jej domeny nadrzędne są przeszukiwane, chyba że nazwa kończy
się kropką.
Funkcja gethostbyaddr() zwraca strukturę typu hostent dla zadanego
adresu adres o długości dlug i typie adresu typ. Obecnie jedynym
poprawnym typem adresu jest AF_INET.
Funkcja sethostent() określa, jeżeli stayopen jest prawdziwe (1), że do
odpytywania serwera nazw będzie użyte połączenie TCP i to połączenie
będzie otwarte podczas kolejnych zapytań. W przeciwnym wypadku serwer
nazw będzie odpytywany przy użyciu datagramów UDP.
Funkcja endhostent() kończy połączenie TCP odpytywania serwera nazw.
(Przestarzała) funkcja herror() wypisuje na standardowe wyjście błędów
komunikat błędu przypisany do bieżącej wartości zmiennej h_errno.
(Przestarzała) funkcja hstrerror() dla przekazanego numeru błędu
(zazwyczaj h_errno) zwraca odpowiadający mu komunikat błędu.
Funkcje gethostbyname() i gethostbyaddr() używają do odpytywania
serwera kombinacji któregokolwiek bądź wszystkich serwerów nazw
named(8), wydzielonych linii z /etc/hosts, oraz Systemu Informacji
Sieciowej (Network Information Service - NIS lub YP), w zależności od
zawartości linii order w pliku /etc/host.conf. (Proszę przeczytać
resolv+(8)). Domyślnie najpierw odpytywane są serwery named(8), a
następnie przeglądany jest /etc/hosts.
Struktura hostent zdefiniowana w <netdb.h> następująco:
struct hostent {
char *h_name; /* oficjalna nazwa komputera */
char **h_aliases; /* lista aliasów */
int h_addrtype; /* typ adresu komputera */
int h_length; /* długość adresu */
char **h_addr_list; /* lista adresów */
}
#define h_addr h_addr_list[0] /* dla zachowania zgodności */
/* z wcześniejszymi wersjami */
Struktra hostent składa się z:
h_name Oficjalna nazwa komputera.
h_aliases
Zakończona zerem tablica alternatywnych nazw komputera.
h_addrtype
Typ adresu; obecnie zawsze jest to AF_INET.
h_length
Długość adresu w bajtach.
h_addr_list
Zakończona zerem tablica adresów sieciowych komputera w
sieciowym porządku bajtów (network byte order).
h_addr Pierwszy adres z h_addr_list - dla zachowania zgodności ze
wcześniejszymi wersjami
WARTOŚĆ ZWRACANA
Funkcje gethostbyname() i gethostbyaddr() zwracają strukturę hostent
lub wskaźnik NULL w przypadku błędu. W razie błędu, zmienna h_errno
przechowuje numer błędu.
BŁĘDY
Zmienna h_errno może przyjmować następujące wartości:
HOST_NOT_FOUND
Podany komputer jest nieznany.
NO_ADDRESS lub NO_DATA
Żądana nazwa jest poprawna, ale nie ma adresu IP.
NO_RECOVERY
Wystąpił trwały błąd serwera nazw.
TRY_AGAIN
Autorytatywny serwer nazw zwrócił tymczasowy błąd. Proszę
spróbować ponownie później.
PLIKI
/etc/host.conf
plik konfiguracyjny resolver configuration file
/etc/hosts
plik bazy danych komputerów
ZGODNE Z
BSD 4.3.
UWAGI
Standard SUS-v2 jest błędny i określa parametr len funkcji
gethostbyaddr() jako mający typ size_t. (No nie jest właściwe,
ponieważ musi to być typ int, którym size_t nie jest. POSIX 1003.1-2001
używa socklen_t, co jest OK)
Funkcje gethostbyname() i gethostbyaddr() mogą zwracać wskaźniki do
danych statycznych, które mogą być nadpisane przez kolejne wywołania.
Kopiowanie struct hostent nie wystarcza, ponieważ zawiera ona wskaźniki
- wymagane jest skopiowanie wszystkiego.
Glibc2 ma także funkcję gethostbyname2(), która działa jak
gethostbyname(), ale pozwala określić rodzinę adresów, do której musi
należeć zadany adres.
Glibc2 ma także wielowątkowe wersje gethostbyname_r() i
gethostbyname2_r(). Zwracają one 0 w przypadku powodzenia i niezero w
razie błędu. Wynik funkcji jest przechowywany w strukturze o adresie
ret. Po wywołaniu funkcji *result będzie NULL w razie błędu albo
wskaźnikiem do wyniku, gdy funkcja zakończy się powodzeniem. Pomocnicze
dane są przechowywane w buforze buf o długości buflen. (Jeżeli bufor
jest za mały, to funkcje te zwrócą ERANGE.) Globalna zmienna h_errno
nie jest modyfikowana, ale numer błędu jest przekazywany w zmiennej,
której adres został podany w h_errnop.
POSIX 1003.1-2001 traktuje gethostbyaddr() i gethostbyname() jako
spuściznę i wprowadza
struct hostent *getipnodebyaddr (const void *restrict addr,
socklen_t len, int type, int *restrict error_num);
struct hostent *getipnodebyname (const char *name,
int type, int flags, int *error_num);
ZOBACZ TAKŻE
resolver(3), hosts(5), hostname(7), resolv+(8), named(8)