Provided by: manpages-pl-dev_20060617-3_all bug

NAZWA

       getnameinfo  -  tlumaczenie  adresu  na  nazw  w  sposob  niezaleny  od
       protokolu

SK/LADNIA

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

       int getnameinfo(const struct sockaddr *sa, socklen_t salen,
        char *host, size_t hostlen,
        char *serv, size_t servlen, int flags);

OPIS

       Funkcja getnameinfo(3) obsluguje  niezalene  od  protokolu  tlumaczenie
       adresu   do   nazwy   komputera.  Lczy  w  sobie  funkcjonalno  funkcji
       gethostbyaddr(3)    oraz    getservbyport(3)    i    jest    odwrotnoci
       getaddrinfo(3). Argument sa jest wskanikiem do ogolnej struktury adresu
       gniazda (typu sockaddr_in lub sockaddr_in6) o  rozmiarze  salen,  ktora
       przechowuje  wejciowy  adres  IP i numer portu. Argumenty host i port s
       wskanikami do buforow (odpowiednio o rozmiarach hostlen i  servlen),  w
       ktorych zapisane bd zwrocone wartoci.

       Funkcja wywolujca moe okreli, e nazwa komputera (lub nazwa serwisu) nie
       jest potrzebna, przez przekazanie wartoci NULL w argumencie  host  (lub
       serv)  albo przez podanie 0 w parametrze hostlen (lub servlen). Jednake
       co najmniej jeden z podanych  parametrow  (nazwa  komputera  lub  nazwa
       serwisu) musi by ustawiony.

       Argument flags w nastpujcy sposob zmienia zachowanie getnameinfo(3):

       NI_NOFQDN
              Jeeli  ustawiono,  to  dla lokalnych komputerow zwraca tylko ich
              nazwy, a nie peln domenow nazw sieciow (FQDN).

       NI_NUMERICHOST
              Jeli ustawiono,  to  nazwa  komputera  jest  zwracana  w  formie
              numerycznej.  (Moe  si to rownie zdarzy wtedy, gdy nie ustawiono
              tej flagi i nie mona znale nazwy komputera).

       NI_NAMEREQD
              Jeli  ustawiono,  to  w  razie  nieznalezienia  nazwy  komputera
              zwracany jest bld.

       NI_NUMERICSERV
              Jeeli  ustawiono,  to  zwracany  jest  adres  serwisu  w postaci
              numerycznej, na przyklad jako numer portu.

       NI_DGRAM
              Jeeli ustawiono, to serwis jest  oparty  raczej  na  datagramach
              (UDP)  ni  na  strumieniach  (TCP).  Jest  to wymagane dla kilku
              portow (512-514), ktore maj przypisane inne serwisy dla  UDP  ni
              dla TCP.

WARTO ZWRACANA

       W  przypadku  powodzenia  zwracane  jest 0, a  nazwy komputera i uslug,
       jeli ich zadano, s  wypelniane  lacuchami  znakow  zakoczonymi  nullem.
       Nazwy  te  mog  zosta obcite, tak aby zmiecily si w podanych dlugociach
       bufora. W razie bldu zwracany jest jeden z poniszych niezerowych  kodow
       bldu:

       EAI_AGAIN
              Obecnie nie mona znale nazwy, Prosz sprobowa poniej.

       EAI_BADFLAGS
              Parametr flags ma niepoprawn warto.

       EAI_FAIL
              Wystpil bld krytyczny.

       EAI_FAMILY
              Nieznana  rodzina  adresow lub dlugo adresu nie jest odpowiednia
              dla podanej rodziny.

       EAI_MEMORY
              Brak pamici.

       EAI_NONAME
              Nie  mona  rozwin  nazwy  dla  podanych  parametrow.   Ustawiono
              NI_NAMEREQD,  a  nie  mona znale nazwy komputera albo nie zadano
              ani nazwy komputera, ani nazwy serwisu.

       EAI_OVERFLOW
              Bufor, na ktory wskazywal parametr host lub serv, byl za maly.

       EAI_SYSTEM
              Wystpil bld systemowy. Numer bldu mona znale w zmiennej errno.

       Funkcja  gai_strerror(3)  przeksztalca  te  kody  bldow   w   komunikat
       zrozumialy dla czlowieka, wic jest odpowiednia do raportowania bldow.

PLIKI

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

UWAGA

       Aby  pomoc  programicie  w  wyborze  odpowiedniego  rozmiaru buforow, w
       <netdb.h> zdefiniowano stale
              # define NI_MAXHOST      1025
              # define NI_MAXSERV      32
       Pierwsza z nich jest stal  MAXDNAME  zdefiniowan  w  pliku  naglowkowym
       <arpa/nameser.h>  z  nowszych  wersji  BIND-a.  Druga  jest zgadywaniem
       opartym na licie serwisow w biecym RFC dotyczcym  przypisanych  numerow
       (Assigned Numbers RFC).

PRZYK/LAD

       Nastpujcy  kod probuje pobra numeryczn nazw komputera i nazw uslugi dla
       podanego adresu gniazda. Prosz zauway, e nie ustawiono na sztywno adnej
       rodziny adresow.

                struct sockaddr *sa;    /* wejcie */
                char hbuf[NI_MAXHOST], sbuf[NI_MAXSERV];

                if (getnameinfo(sa, sa->sa_len, hbuf, sizeof(hbuf), sbuf,
                    sizeof(sbuf), NI_NUMERICHOST | NI_NUMERICSERV) == 0)
                        printf("komputer=%s, serwis=%s\n", hbuf, sbuf);

       Nastpujca  wersja  sprawdza,  czy  adres  gniazda ma odwrotne mapowanie
       adresu.

                struct sockaddr *sa;    /* wejcie */
                char hbuf[NI_MAXHOST];

                if (getnameinfo(sa, sa->sa_len, hbuf, sizeof(hbuf),
                    NULL, 0, NI_NAMEREQD))
                       printf("nie mona znale nazwy komputera");
                else
                       printf("komputer=%s\n", hbuf);

ZGODNE Z

       RFC 2553 (Patrz take XNS, temat 5.2).

ZOBACZ TAKE

       getaddrinfo(3), gethostbyaddr(3),  getservbyname(3),  getservbyport(3),
       inet_ntop(3), socket(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

INFORMACJE O T/LUMACZENIU

       Powysze  tlumaczenie  pochodzi z nieistniejcego ju Projektu Tlumaczenia
       Manuali i moe nie by aktualne. W razie zauwaenia ronic  midzy  powyszym
       opisem  a  rzeczywistym  zachowaniem  opisywanego programu lub funkcji,
       prosimy o zapoznanie si z oryginaln (angielsk) wersj strony podrcznika.