Provided by:
manpages-pl-dev_20060617-3_all 
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.