Provided by: manpages-pl-dev_0.7-1_all bug

NAZWA

       getnameinfo - tłumaczenie adresu na nazwę w sposób niezależny od protokołu

SKŁADNIA

       #include <sys/socket.h>
       #include <netdb.h>

       int getnameinfo(const struct sockaddr *addr, socklen_t addrlen,
                       char *host, socklen_t hostlen,
                       char *serv, socklen_t servlen, int flags);

   Wymagane ustawienia makr biblioteki glibc (patrz feature_test_macros(7)):

       getnameinfo():
           Od glibc 2.22: _POSIX_C_SOURCE >= 201112L
           Glibc 2.21 i wcześniejsze: _POSIX_C_SOURCE

OPIS

       Funkcja  getnameinfo()  jest  odwrotnością  funkcji  getaddrinfo(3):  tłumaczy,  w  sposób  niezależny od
       protokołu, adres gniazda na odpowiadające mu nazwę komputera  i  usługi.  Łączy  w  sobie  funkcjonalność
       funkcji  gethostbyaddr(3)  oraz  getservbyport(3),  ale  w  przeciwieństwie  do  nich  getnameinfo() jest
       bezpieczna dla wątków i pozwala programowi wyeliminować zależności od IPv4-kontra-IPv6.

       Argument sa jest wskaźnikiem do ogólnej struktury adresu gniazda (typu sockaddr_in  lub  sockaddr_in6)  o
       rozmiarze  addrlen,  która  przechowuje  wejściowy  adres  IP  i  numer  portu.  Argumenty host i port są
       wskaźnikami do zaalokowanych przez program  wywołujący  tę  funkcję  buforów  (odpowiednio  o  rozmiarach
       hostlen  i  servlen),  w  których  getnameinfo()  umieści  zakończone NULL-em łańcuchy znaków zawierające
       odpowiednio nazwę komputera i nazwy usług.

       Funkcja wywołująca może określić, że nazwa komputera  (lub  nazwa  serwisu)  nie  jest  potrzebna,  przez
       przekazanie  wartości  NULL  w  argumencie host (lub serv) albo przez podanie 0 w parametrze hostlen (lub
       servlen). Jednakże co najmniej jeden z podanych parametrów (nazwa komputera lub nazwa serwisu)  musi  być
       ustawiony.

       Argument flags zmienia zachowanie getnameinfo() w następujący sposób:

       NI_NAMEREQD
              Jeśli ustawiono, to w razie nieznalezienia nazwy komputera zwracany jest błąd.

       NI_DGRAM
              Jeżeli  ustawiono,  to  serwis  jest oparty raczej na datagramach (UDP) niż na strumieniach (TCP).
              Jest to wymagane dla kilku portów (512-514), które mają przypisane inne serwisy dla  UDP  niż  dla
              TCP.

       NI_NOFQDN
              Jeżeli  ustawiono, to zwracana jest tylko lokalna część nazwy komputera, a nie jego pełną domenowa
              nazwa sieciowa.

       NI_NUMERICHOST
              Jeśli ustawiono, to nazwa komputera jest zwracana w  formie  numerycznej.  (Może  się  to  również
              zdarzyć wtedy, gdy nie ustawiono tej flagi i nie można znaleźć nazwy komputera).

       NI_NUMERICSERV
              Jeśli  ustawiono,  to  nazwa  komputera  jest  zwracana w formie numerycznej. (Może się to również
              zdarzyć wtedy, gdy nie ustawiono tej flagi i nie można znaleźć nazwy komputera).

   Rozszerzenia getnameinfo() dotyczące międzynarodowych nazw domen
       Począwszy do wersji 2.3.4 biblioteki glibc, getnameinfo() został rozszerzony i pozwala  na  przezroczystą
       konwersję  nazw komputerów do i z formatu międzynarodowych nazw domenowych (Internationalized Domain Name
       — IDN; patrz RFC 3490, Internationalizing Domain Names in Applications (IDNA)). Zostały zdefiniowane trzy
       nowe flagi:

       NI_IDN Jeśli użyto tego znacznika, to nazwa znaleziona przez  proces  wyszukiwania  jest  konwertowana  z
              formatu  IDN  na  kodowanie  zgodne  z  bieżącymi  ustawieniami  językowymi.  Nazwy składające się
              wyłącznie ze znaków ASCII nie są zmieniane, co pozwala na bezproblemowe używanie tego znacznika  w
              istniejących programach i środowiskach.

       NI_IDN_ALLOW_UNASSIGNED, NI_IDN_USE_STD3_ASCII_RULES
              Ustawienie tych znaczników włączy odpowiednio znaczniki IDNA_ALLOW_UNASSIGNED (zezwala na używanie
              nieprzypisanych  znaków  Unikodu)  i  IDNA_USE_STD3_ASCII_RULES  (upewnia  się,  że zwracana nazwa
              komputera jest zgodna ze standardem STD3), które będą używane podczas obsługi IDNA.

WARTOŚĆ ZWRACANA

       W przypadku powodzenia zwracane jest 0, a nazwy komputera i usług,  jeśli  ich  zażądano,  są  wypełniane
       łańcuchami  znaków  zakończonymi  NULL-em. Nazwy te mogą zostać obcięte, tak aby zmieściły się w podanych
       długościach bufora. W razie błędu zwracany jest jeden z poniższych niezerowych kodów błędu:

       EAI_AGAIN
              Obecnie nie można znaleźć nazwy. Proszę spróbować później.

       EAI_BADFLAGS
              Argument flags ma niepoprawną wartość.

       EAI_FAIL
              Wystąpił błąd krytyczny.

       EAI_FAMILY
              Nieznana rodzina adresów lub długość adresu nie jest odpowiednia dla podanej rodziny.

       EAI_MEMORY
              Brak pamięci.

       EAI_NONAME
              Nie można rozwinąć nazwy dla podanych parametrów. Ustawiono NI_NAMEREQD, a nie można znaleźć nazwy
              komputera albo nie zażądano ani nazwy komputera, ani nazwy serwisu.

       EAI_OVERFLOW
              Bufor, na który wskazywał parametr host lub serv, był za mały.

       EAI_SYSTEM
              Wystąpił błąd systemowy. Numer błędu można znaleźć w zmiennej errno.

       Funkcja gai_strerror(3) przekształca te kody błędów w  komunikat  zrozumiały  dla  człowieka,  więc  jest
       odpowiednia do raportowania błędów.

PLIKI

       /etc/hosts
       /etc/nsswitch.conf
       /etc/resolv.conf

WERSJE

       getnameinfo() jest dostarczane przez glibc od wersji 2.1.

ATRYBUTY

       Informacje o pojęciach używanych w tym rozdziale można znaleźć w podręczniku attributes(7).
       ┌───────────────┬────────────────────────┬────────────────────┐
       │ InterfejsAtrybutWartość            │
       ├───────────────┼────────────────────────┼────────────────────┤
       │ getnameinfo() │ Bezpieczeństwo wątkowe │ MT-Safe env locale │
       └───────────────┴────────────────────────┴────────────────────┘

ZGODNE Z

       POSIX.1-2001, POSIX.1-2008, RFC 2553.

UWAGI

       Aby pomóc programiście w wyborze odpowiedniego rozmiaru buforów, w <netdb.h> zdefiniowano stałe

           #define NI_MAXHOST      1025
           #define NI_MAXSERV      32

       Od  glibc  2.8  powyższe  definicje  są  dostępne,  jeśli  zdefiniowano  odpowiednie  makro,  mianowicie:
       _GNU_SOURCE, _DEFAULT_SOURCE (od glibc 2.19) lub (w wersjach glibc  do  2.19  włącznie)  _BSD_SOURCE  lub
       _SVID_SOURCE.

       Pierwsza  z  nich jest stałą MAXDNAME zdefiniowaną w pliku nagłówkowym <arpa/nameser.h> z nowszych wersji
       BIND-a. Druga jest zgadywaniem opartym na liście serwisów w bieżącym RFC dotyczącym przypisanych  numerów
       (Assigned Numbers RFC).

       Przed glibc w wersji 2.2 argumenty hostlen i servlen były wprowadzane jako size_t.

PRZYKŁAD

       Następujący  kod  próbuje  pobrać  numeryczną nazwę komputera i nazwę usługi dla podanego adresu gniazda.
       Proszę zauważyć, że nie ustawiono na sztywno żadnej rodziny adresów.

           struct sockaddr *addr;     /* wejście */
           socklen_t addrlen;         /* wejście */
           char hbuf[NI_MAXHOST], sbuf[NI_MAXSERV];

           if (getnameinfo(addr, addrlen, hbuf, sizeof(hbuf), sbuf,
                       sizeof(sbuf), NI_NUMERICHOST | NI_NUMERICSERV) == 0)
               printf("host=%s, serv=%s\n", hbuf, sbuf);

       Następująca wersja sprawdza, czy adres gniazda ma odwrotne mapowanie adresu.

           struct sockaddr *addr;     /* wejście */
           socklen_t addrlen;         /* wejście */
           char hbuf[NI_MAXHOST];

           if (getnameinfo(addr, addrlen, hbuf, sizeof(hbuf),
                       NULL, 0, NI_NAMEREQD))
               printf("nie można znaleźć nazwy komputera");
           else
               printf("komputer=%s\n", hbuf);

       Przykładowy program używający getnameinfo() można znaleźć w getaddrinfo(3).

ZOBACZ TAKŻE

       accept(2), getpeername(2),  getsockname(2),  recvfrom(2),  socket(2),  getaddrinfo(3),  gethostbyaddr(3),
       getservbyname(3), getservbyport(3), inet_ntop(3), hosts(5), services(5), hostname(7), named(8)

       R.  Gilligan,  S.  Thomson,  J. Bound i W. Stevens, Basic Socket Interface Extensions for IPv6, RFC 2553,
       marzec 1999.

       Tatsuya Jinmei i Atsushi Onoe, An Extension of Format for IPv6 Scoped Addresses, szkic internetowy, prace
       trwają ftp://ftp.ietf.org/internet-drafts/draft-ietf-ipngwg-scopedaddr-format-02.txt.

       Craig Metz, Protocol Independence Using the Sockets API, Proceedings  of  the  freenix  track:   Coroczna
       techniczna konferencja USENIX 2000, czerwiec 2000 http://www.usenix.org/publications/library/proceedings
       /usenix2000/freenix/metzprotocol.html.

O STRONIE

       Angielska wersja tej strony pochodzi z wydania 4.07 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 man są: Robert Luberda <robert@debian.org> i
       Michał Kułach <michal.kulach@gmail.com>.

       Polskie tłumaczenie jest częścią projektu manpages-pl; uwagi, pomoc, zgłaszanie błędów na stronie
       http://sourceforge.net/projects/manpages-pl/. Jest zgodne z wersją  4.07 oryginału.

GNU                                                2016-03-15                                     GETNAMEINFO(3)