oracular (3) gethostbyname.3.gz

Provided by: manpages-pl-dev_4.23.1-1_all bug

NAZWA

       gethostbyname,   gethostbyaddr,   sethostent,   gethostent,   endhostent,   h_errno,  herror,  hstrerror,
       gethostbyaddr_r, gethostbyname2, gethostbyname2_r, gethostbyname_r, gethostent_r - zwraca  wpis  sieciowy
       komputera

BIBLIOTEKA

       Standardowa biblioteka C (libc, -lc)

SKŁADNIA

       #include <netdb.h>

       void sethostent(int stayopen);
       void endhostent(void);

       [[przestarzałe]] extern int h_errno;

       [[przestarzałe]] struct hostent *gethostbyname(const char *name);
       [[przestarzałe]] struct hostent *gethostbyaddr(const void addr[.len],
                                                    socklen_t len, int type);

       [[przestarzałe]] void herror(const char *s);
       [[przestarzałe]] const char *hstrerror(int err);

       /* Rozszerzenie systemu V/POSIX */
       struct hostent *gethostent(void);

       /* Rozszerzenia GNU */
       [[przestarzałe]]
       struct hostent *gethostbyname2(const char *name, int af);

       int gethostent_r(struct hostent *restrict ret,
                        char buf[restrict .buflen], size_t buflen,
                        struct hostent **restrict result,
                        int *restrict h_errnop);

       [[przestarzałe]]
       int gethostbyaddr_r(const void addr[restrict .len], socklen_t len,
                        int type,
                        struct hostent *restrict ret,
                        char buf[restrict .buflen], size_t buflen,
                        struct hostent **restrict result,
                        int *restrict h_errnop);
       [[przestarzałe]]
       int gethostbyname_r(const char *restrict name,
                        struct hostent *restrict ret,
                        char buf[restrict .buflen], size_t buflen,
                        struct hostent **restrict result,
                        int *restrict h_errnop);
       [[przestarzałe]]
       int gethostbyname2_r(const char *restrict name, int af,
                        struct hostent *restrict ret,
                        char buf[restrict .buflen], size_t buflen,
                        struct hostent **restrict result,
                        int *restrict 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 do 2.19 włącznie:
               _BSD_SOURCE || _SVID_SOURCE

       herror(), hstrerror():
           Od glibc 2.19:
               _DEFAULT_SOURCE
           glibc 2.8 do glibc 2.19:
               _BSD_SOURCE || _SVID_SOURCE
           Przed glibc 2.8:
               brak

       h_errno:
           Od glibc 2.19
               _DEFAULT_SOURCE || _POSIX_C_SOURCE < 200809L
           glibc 2.12 do glibc 2.19:
               _BSD_SOURCE || _SVID_SOURCE || _POSIX_C_SOURCE < 200809L
           Przed glibc 2.12:
               brak

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 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.

       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 (zdefiniowane w <sys/socket.h>). 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.

       (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.

       Zapytania o nazwy domenowe z gethostbyname() i gethostbyaddr() polegają na skonfigurowanych źródłach Name
       Service Switch (nsswitch.conf(5)) lub lokalnym serwerze nazw  (named(8)).  Domyślną akcją jest  odpytanie
       skonfigurowanych  źródeł  Name  Service Switch (nsswitch.conf(5), a jeśli się to nie powiedzie, lokalnego
       serwera nazw (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).

       ┌────────────────────────────┬────────────────────────┬──────────────────────────────────────────────────┐
       │InterfejsAtrybutWartość                                          │
       ├────────────────────────────┼────────────────────────┼──────────────────────────────────────────────────┤
       │gethostbyname()             │ Bezpieczeństwo wątkowe │ MT-niebezpieczne race:hostbyname env locale      │
       ├────────────────────────────┼────────────────────────┼──────────────────────────────────────────────────┤
       │gethostbyaddr()             │ Bezpieczeństwo wątkowe │ MT-niebezpieczne race:hostbyaddr env locale      │
       ├────────────────────────────┼────────────────────────┼──────────────────────────────────────────────────┤
       │sethostent(), endhostent(), │ Bezpieczeństwo wątkowe │ MT-niebezpieczne race:hostent env locale         │
       │gethostent_r()              │                        │                                                  │
       ├────────────────────────────┼────────────────────────┼──────────────────────────────────────────────────┤
       │herror(), hstrerror()       │ Bezpieczeństwo wątkowe │ MT-bezpieczne                                    │
       ├────────────────────────────┼────────────────────────┼──────────────────────────────────────────────────┤
       │gethostent()                │ Bezpieczeństwo wątkowe │ MT-niebezpieczne race:hostent race:hostentbuf    │
       │                            │                        │ env locale                                       │
       ├────────────────────────────┼────────────────────────┼──────────────────────────────────────────────────┤
       │gethostbyname2()            │ Bezpieczeństwo wątkowe │ MT-niebezpieczne race:hostbyname2 env locale     │
       ├────────────────────────────┼────────────────────────┼──────────────────────────────────────────────────┤
       │gethostbyaddr_r(),          │ Bezpieczeństwo wątkowe │ MT-bezpieczne 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.

STANDARDY

       sethostent()
       endhostent()
       gethostent()
              POSIX.1-2008.

       gethostent_r()
              GNU.

       Pozostałe:
              Brak.

HISTORIA

       sethostent()
       endhostent()
       gethostent()
              POSIX.1-2001.

       gethostbyname()
       gethostbyaddr()
       h_errno
              Oznaczone jako  wychodzące  z  użycia  w  POSIX.1-2001.  Usunięte  w  POSIX.1-2008,  z  zaleceniem
              stosowania w zamian getaddrinfo(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  ma   także   wielowątkowe   wersje   gethostent_r(),   gethostbyaddr_r(),   gethostbyname_r()   i
       gethostbyname2_r().  Proces  wywołujący  przekazuje strukturę hostent w ret, który będzie wypełniony, gdy
       funkcja zakończy się pomyślnie, oraz tymczasowy bufor  roboczy  buf  o  rozmiarze  buflen.  Po  pomyślnym
       wywołaniu,  result  będzie  wskazywał na wynik. W razie błędu lub gdy nie znaleziono żadnego wpisu result
       będzie ustawiony na NULL. Funkcje zwracają one 0 w przypadku powodzenia lub liczbę różną od zera w  razie
       błędu.  Oprócz  błędów,  które  mogą zwrócić niewielowątkowe wersje tych funkcji, funkcje mogą zwróć błąd
       RANGE, jeśli buf jest za mały - w takim wypadku należy powtórzyć wywołanie funkcji  z  większym  buforem.
       Globalna  zmienna  h_errno  nie  jest  modyfikowana, ale numer błędu jest przekazywany w zmiennej, której
       adres został podany w h_errnop.

USTERKI

       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)

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⟩.