Provided by: manpages-pl-dev_4.13-4_all 

NAZWA
gethostbyname, gethostbyaddr, sethostent, gethostent, endhostent, h_errno, herror, hstrerror, gethostbyaddr_r, gethostbyname2, gethostbyname2_r, gethostbyname_r, gethostent_r - zwraca 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 void *addr, socklen_t len, int type); void sethostent(int stayopen); void endhostent(void); void herror(const char *s); const char *hstrerror(int err); /* Rozszerzenie systemu V/POSIX */ struct hostent *gethostent(void); /* Rozszerzenia GNU */ 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); Wymagane ustawienia makr biblioteki glibc (patrz feature_test_macros(7)): gethostbyname2(), gethostent_r(), gethostbyaddr_r(), gethostbyname_r(), gethostbyname2_r(): Od glibc 2.19: _DEFAULT_SOURCE Glibc w wersji do 2.19 włącznie: _BSD_SOURCE || _SVID_SOURCE herror(), hstrerror(): Od glibc 2.19: _DEFAULT_SOURCE Glibc 2.8 do 2.19: _BSD_SOURCE || _SVID_SOURCE Przed glibc 2.8: none h_errno: Od glibc 2.19: _DEFAULT_SOURCE || _POSIX_C_SOURCE < 200809L Glibc 2.12 do 2.19: _BSD_SOURCE || _SVID_SOURCE || _POSIX_C_SOURCE < 200809L Przed glibc 2.12: none
OPIS
Funkcje gethostbyname*(), gethostbyaddr*(), herror() oraz hstrerror() są przestarzałe. Aplikacje powinny zamiast nich używaćgetaddrinfo(3), getnameinfo(3) i gai_strerror(3). Funkcja gethostbyname() dla danego komputera name zwraca strukturę typu hostent. name jest tutaj albo nazwą komputera, albo adresem IPv4 w standardowej notacji z kropkami (jak opisano w inet_addr(3)). Jeżeli name jest adresem IPv4, to gethostbyname() nie wykonuje żadnych sprawdzeń i po prostu kopiuje name do pola h_name oraz jej odpowiednik struct in_addr do pola h_addr_list[0] zwracanej struktury hostent. Jeżeli name nie kończy się kropką oraz ustawiono zmienną środowiskową HOSTALIASES, to wyszukiwanie name zacznie się od pliku z aliasami, wskazywanego przez HOSTALIASES (format tego pliku opisany jest w hostname(7)). Bieżąca domena i jej domeny nadrzędne są przeszukiwane, chyba że name kończy się kropką. Funkcja gethostbyaddr() zwraca strukturę typu hostent dla zadanego adresu addr o długości len i typie adresu type. Poprawnymi typami adresów są AF_INET i AF_INET6. Adres komputera jest wskaźnikiem do struktury o typie zależnym od typu adresu, na przykład struct in_addr * (najprawdopodobniej otrzymany przez wywołanie inet_addr(3)) dla adresu o typie 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 stderr 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. 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)). Historia Plik nsswitch.conf(5) jest współczesnym sposobem kontrolowania kolejności wyszukiwań komputerów. W glibc 2.4 i wcześniejszych, do określenia kolejności wyszukiwań komputerów służyło słowo kluczowe order zdefiniowane w /etc/host.conf (host.conf(5)). 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 wskaźnikiem null tablica alternatywnych nazw komputera. h_addrtype Typ adresu; obecnie zawsze jest to AF_INET lub AF_INET6. h_length Długość adresu w bajtach. h_addr_list Zakończona wskaźnikiem null tablica adresów sieciowych komputera (w sieciowym porządku bajtów). 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. Wartość zwrócona, jeśli jest różna od null, może wskazywać na statyczne dane, patrz UWAGI poniżej.
BŁĘDY
Zmienna h_errno może przyjmować następujące wartości: HOST_NOT_FOUND Podany komputer jest nieznany. NO_DATA Żądana nazwa jest prawidłowa, lecz nie posiada adresu IP. Inny typ żądania skierowany do serwera nazw dla tej domeny może zwrócić odpowiedź. Stała NO_ADDRESS jest synonimem NO_DATA. 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 biblioteki resolver /etc/hosts plik bazy danych komputerów /etc/nsswitch.conf plik konfiguracyjny serwisów nazw (NSS)
ATRYBUTY
Informacje o pojęciach używanych w tym rozdziale można znaleźć w podręczniku attributes(7). ┌───────────────────┬────────────────────────┬───────────────────────────────┐ │Interfejs │ Atrybut │ Wartość │ ├───────────────────┼────────────────────────┼───────────────────────────────┤ │gethostbyname() │ Bezpieczeństwo wątkowe │ MT-Unsafe race:hostbyname env │ │ │ │ locale │ ├───────────────────┼────────────────────────┼───────────────────────────────┤ │gethostbyaddr() │ Bezpieczeństwo wątkowe │ MT-Unsafe race:hostbyaddr env │ │ │ │ locale │ ├───────────────────┼────────────────────────┼───────────────────────────────┤ │sethostent(), │ Bezpieczeństwo wątkowe │ MT-Unsafe race:hostent env │ │endhostent(), │ │ locale │ │gethostent_r() │ │ │ ├───────────────────┼────────────────────────┼───────────────────────────────┤ │herror(), │ Bezpieczeństwo wątkowe │ MT-Safe │ │hstrerror() │ │ │ ├───────────────────┼────────────────────────┼───────────────────────────────┤ │gethostent() │ Bezpieczeństwo wątkowe │ MT-Unsafe race:hostent │ │ │ │ race:hostentbuf env locale │ ├───────────────────┼────────────────────────┼───────────────────────────────┤ │gethostbyname2() │ Bezpieczeństwo wątkowe │ MT-Unsafe race:hostbyname2 │ │ │ │ env locale │ ├───────────────────┼────────────────────────┼───────────────────────────────┤ │gethostbyaddr_r(), │ Bezpieczeństwo wątkowe │ MT-Safe env locale │ │gethostbyname_r(), │ │ │ │gethostbyname2_r() │ │ │ └───────────────────┴────────────────────────┴───────────────────────────────┘ W powyższej tabeli, hostent w race:hostent oznacza, że jeśli któraś z funkcji sethostent(), gethostent(), gethostent_r() lub endhostent() jest używana równolegle w różnych wątkach programu, może nastąpić sytuacja wyścigu danych.
ZGODNE Z
POSIX.1-2001 definiuje gethostbyname(), gethostbyaddr(), sethostent(), endhostent(), gethostent() i h_errno; gethostbyname(), gethostbyaddr() i h_errno są oznaczone jako starzejące się. POSIX.1-2008 usuwa definicje gethostbyname(), gethostbyaddr() oraz h_errno, zalecając używanie zamiast nich funkcjigetaddrinfo(3) i getnameinfo(3).
UWAGI
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. W oryginalnej implementacji BSD, argument len funkcji gethostbyname() był typu int. Standard SUS-v2 jest błędny i określa parametr len funkcji gethostbyaddr() jako będący typu size_t. (Nie jest to właściwe, ponieważ musi to być typ int, którym size_t nie jest. POSIX.1-2001 używa socklen_t, co jest OK). Patrz także accept(2). Prototyp BSD funkcji gethostbyaddr() używa const char * dla trzeciego argumentu. Rozszerzenie System V/POSIX POSIX wymaga, aby wywołanie gethostent() zwróciło następny wpis w bazie danych komputerów. Jeśli używany jest DNS/BIND nie ma to większego sensu, ale może być uzasadnione, jeśli baza danych komputerów jest plikiem, który można odczytać linia po linii. Wiele systemów funkcja o tej nazwie czyta plik /etc/hosts. Może być on dostępny tylko wtedy, gdy biblioteka została skompilowana bez wsparcia dla DNS-u. Wersja glibc ignoruje wpisy IPv6. Ta funkcja nie jest wielowątkowa, glibc dodaje jej wielowątkową wersję gethostent_r(). Rozszerzenia GNU 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 also has reentrant versions gethostent_r(), gethostbyaddr_r(), gethostbyname_r(), and gethostbyname2_r(). The caller supplies a hostent structure ret which will be filled in on success, and a temporary work buffer buf of size buflen. After the call, result will point to the result on success. In case of an error or if no entry is found result will be NULL. The functions return 0 on success and a nonzero error number on failure. In addition to the errors returned by the nonreentrant versions of these functions, if buf is too small, the functions will return ERANGE, and the call should be retried with a larger buffer. The global variable h_errno is not modified, but the address of a variable in which to store error numbers is passed in h_errnop.
BŁĘDY
gethostbyname() nie rozpoznaje komponentów oddzielonego kropkami łańcucha adresu IPv4, jeśli są one wyrażone jako liczby szesnastkowe.
ZOBACZ TAKŻE
getaddrinfo(3), getnameinfo(3), inet(3), inet_ntop(3), inet_pton(3), resolver(3), hosts(5), nsswitch.conf(5), hostname(7), named(8)
O STRONIE
Angielska wersja tej strony pochodzi z wydania 5.10 projektu Linux man-pages. Opis projektu, informacje dotyczące zgłaszania błędów oraz najnowszą wersję oryginału można znaleźć pod adresem https://www.kernel.org/doc/man-pages/.
T◈UMACZENIE
Autorami polskiego tłumaczenia niniejszej strony podręcznika są: Robert Luberda <robert@debian.org> i Michał Kułach <michal.kulach@gmail.com> Niniejsze tłumaczenie jest wolną dokumentacją. Bliższe informacje o warunkach licencji można uzyskać zapoznając się z GNU General Public License w wersji 3 ⟨https://www.gnu.org/licenses/gpl-3.0.html⟩ lub nowszej. Nie przyjmuje się ŻADNEJ ODPOWIEDZIALNOŚCI. Błędy w tłumaczeniu strony podręcznika prosimy zgłaszać na adres listy dyskusyjnej ⟨manpages-pl- list@lists.sourceforge.net⟩. 21 grudnia 2020 r. GETHOSTBYNAME(3)