.\" -*- coding: UTF-8 -*-
'\" t
.\" %%%LICENSE_START(PUBLIC_DOMAIN)
.\" This page is in the public domain.
.\" %%%LICENSE_END
.\"
.\" Almost all details are from RFC 2553.
.\"
.\" 2004-12-14, mtk, Added EAI_OVERFLOW error
.\" 2004-12-14 Fixed description of error return
.\"
.\"*******************************************************************
.\"
.\" This file was generated with po4a. Translate the source file.
.\"
.\"*******************************************************************
.TH getnameinfo 3 "15 czerwca 2024 r." "Linux man\-pages 6.9.1" 
.SH NAZWA
getnameinfo \- tłumaczy adres na nazwę w sposób niezależny od protokołu
.SH BIBLIOTEKA
Standardowa biblioteka C (\fIlibc\fP, \fI\-lc\fP)
.SH SKŁADNIA
.nf
\fB#include <sys/socket.h>\fP
\fB#include <netdb.h>\fP
.P
\fBint getnameinfo(const struct sockaddr *restrict \fP\fIaddr\fP\fB, socklen_t \fP\fIaddrlen\fP\fB,\fP
\fB                char \fP\fIhost\fP\fB[_Nullable restrict .\fP\fIhostlen\fP\fB],\fP
\fB                socklen_t \fP\fIhostlen\fP\fB,\fP
\fB                char \fP\fIserv\fP\fB[_Nullable restrict .\fP\fIservlen\fP\fB],\fP
\fB                socklen_t \fP\fIservlen\fP\fB,\fP
\fB                int \fP\fIflags\fP\fB);\fP
.fi
.P
.RS -4
Wymagane ustawienia makr biblioteki glibc (patrz \fBfeature_test_macros\fP(7)):
.RE
.P
\fBgetnameinfo\fP():
.nf
    Od glibc 2.22:
        _POSIX_C_SOURCE >= 200112L
    glibc 2.21 i wcześniejsze:
        _POSIX_C_SOURCE
.fi
.SH OPIS
Funkcja \fBgetnameinfo\fP() jest odwrotnością funkcji \fBgetaddrinfo\fP(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
\fBgethostbyaddr\fP(3) oraz \fBgetservbyport\fP(3), ale w przeciwieństwie do nich
\fBgetnameinfo\fP() jest bezpieczna dla wątków i pozwala programowi
wyeliminować zależności od IPv4\-kontra\-IPv6.
.P
Argument \fIaddr\fP jest wskaźnikiem do ogólnej struktury adresu gniazda (typu
\fIsockaddr_in\fP lub \fIsockaddr_in6\fP) o rozmiarze \fIaddrlen\fP, która
przechowuje wejściowy adres IP i numer portu. Argumenty \fIhost\fP i \fIport\fP są
wskaźnikami do zaalokowanych przez program wywołujący tę funkcję buforów
(odpowiednio o rozmiarach \fIhostlen\fP i \fIservlen\fP), w których
\fBgetnameinfo\fP() umieści zakończone NULL\-em łańcuchy znaków zawierające
odpowiednio nazwę komputera i nazwy usług.
.P
Funkcja wywołująca może określić, że nazwa komputera (lub nazwa usługi) nie
jest potrzebna, przez przekazanie wartości NULL w argumencie \fIhost\fP (lub
\fIserv\fP) albo przez podanie 0 w parametrze \fIhostlen\fP (lub
\fIservlen\fP). Jednakże co najmniej jeden z podanych parametrów (nazwa
komputera lub nazwa usługi) musi być ustawiony.
.P
Argument \fIflags\fP zmienia zachowanie \fBgetnameinfo\fP() w następujący sposób:
.TP 
\fBNI_NAMEREQD\fP
Jeśli ustawiono, to w razie nieznalezienia nazwy komputera zwracany jest
błąd.
.TP 
\fBNI_DGRAM\fP
Jeżeli ustawiono, to usługa jest oparta raczej na datagramach (UDP) niż na
strumieniach (TCP). Jest to wymagane dla kilku portów (512\[en]514), które
mają przypisane inne usługi dla UDP niż dla TCP.
.TP 
\fBNI_NOFQDN\fP
Jeżeli ustawiono, to zwracana jest tylko lokalna część nazwy komputera, a
nie jego pełna domenowa nazwa sieciowa.
.TP 
\fBNI_NUMERICHOST\fP
.\" For example, by calling
.\" .BR inet_ntop ()
.\" instead of
.\" .BR gethostbyaddr ().
.\" POSIX.1-2001 TC1 has NI_NUMERICSCOPE, but glibc doesn't have it.
Jeśli ustawiono, to nazwa komputera jest zwracana w formie numerycznej (może
się to również zdarzyć wtedy, gdy nie ustawiono tego znacznika i nie można
znaleźć nazwy komputera).
.TP 
\fBNI_NUMERICSERV\fP
Jeśli ustawiono, to nazwa usługi jest zwracana w formie numerycznej (może
się to również zdarzyć wtedy, gdy nie ustawiono tego znacznika i nie można
znaleźć nazwy komputera).
.SS "Rozszerzenia getnameinfo() dotyczące międzynarodowych nazw domen"
Począwszy do wersji 2.3.4 biblioteki glibc, \fBgetnameinfo\fP() został
rozszerzony i pozwala na przezroczystą konwersję nazw komputerów do i z
formatu międzynarodowych nazw domenowych (Internationalized Domain Name \(em
IDN; patrz RFC\ 3490, \fIInternationalizing Domain Names in Applications (IDNA)\fP). Zostały zdefiniowane trzy nowe znaczniki:
.TP 
\fBNI_IDN\fP
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.
.TP 
\fBNI_IDN_ALLOW_UNASSIGNED\fP
.TQ
\fBNI_IDN_USE_STD3_ASCII_RULES\fP
Ustawienie tych znaczników włączy znaczniki, odpowiednio,
IDNA_ALLOW_UNASSIGNED (zezwala na nieprzypisane kody Unikodu) i
IDNA_USE_STD3_ASCII_RULES (sprawdza wyjście, aby upewnić się że jest to
nazwa stacji zgodna z STD3) do użycia w obsłudze IDNA.
.SH "WARTOŚĆ ZWRACANA"
.\" FIXME glibc defines the following additional errors, some which
.\" can probably be returned by getnameinfo(); they need to
.\" be documented.
.\"
.\"     #ifdef __USE_GNU
.\"     #define EAI_INPROGRESS  -100  /* Processing request in progress.  */
.\"     #define EAI_CANCELED    -101  /* Request canceled.  */
.\"     #define EAI_NOTCANCELED -102  /* Request not canceled.  */
.\"     #define EAI_ALLDONE     -103  /* All requests done.  */
.\"     #define EAI_INTR        -104  /* Interrupted by a signal.  */
.\"     #define EAI_IDN_ENCODE  -105  /* IDN encoding failed.  */
.\"     #endif
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:
.TP 
\fBEAI_AGAIN\fP
Obecnie nie można znaleźć nazwy. Proszę spróbować później.
.TP 
\fBEAI_BADFLAGS\fP
Argument \fIflags\fP ma niepoprawną wartość.
.TP 
\fBEAI_FAIL\fP
Wystąpił błąd krytyczny.
.TP 
\fBEAI_FAMILY\fP
Nieznana rodzina adresów lub długość adresu nie jest odpowiednia dla podanej
rodziny.
.TP 
\fBEAI_MEMORY\fP
Brak pamięci.
.TP 
\fBEAI_NONAME\fP
Nie można rozwinąć nazwy dla podanych parametrów. Ustawiono \fBNI_NAMEREQD\fP,
a nie można znaleźć nazwy komputera albo nie zażądano ani nazwy komputera,
ani nazwy usługi.
.TP 
\fBEAI_OVERFLOW\fP
Bufor, na który wskazywał parametr \fIhost\fP lub \fIserv\fP, był za mały.
.TP 
\fBEAI_SYSTEM\fP
Wystąpił błąd systemowy. Numer błędu można znaleźć w zmiennej \fIerrno\fP.
.P
Funkcja \fBgai_strerror\fP(3) przekształca te kody błędów w komunikat
zrozumiały dla człowieka, więc jest odpowiednia do raportowania błędów.
.SH PLIKI
\fI/etc/hosts\fP
.br
\fI/etc/nsswitch.conf\fP
.br
\fI/etc/resolv.conf\fP
.SH ATRYBUTY
Informacje o pojęciach używanych w tym rozdziale można znaleźć w podręczniku
\fBattributes\fP(7).
.TS
allbox;
lbx lb lb
l l l.
Interfejs	Atrybut	Wartość
T{
.na
.nh
\fBgetnameinfo\fP()
T}	Bezpieczeństwo wątkowe	MT\-bezpieczne env locale
.TE
.SH STANDARDY
POSIX.1\-2008.  RFC\ 2553.
.SH HISTORIA
glibc 2.1.  POSIX.1\-2001.
.P
Przed glibc 2.2, argumenty \fIhostlen\fP i \fIservlen\fP były wprowadzane jako
\fIsize_t\fP.
.SH UWAGI
Aby pomóc programiście w wyborze odpowiedniego rozmiaru buforów, w
\fI<netdb.h>\fP zdefiniowano stałe
.P
.in +4n
.EX
#define NI_MAXHOST      1025
#define NI_MAXSERV      32
.EE
.in
.P
Od glibc 2.8 powyższe definicje są dostępne, jeśli zdefiniowano odpowiednie
makro, mianowicie: \fB_GNU_SOURCE\fP, \fB_DEFAULT_SOURCE\fP (od glibc 2.19) lub (w
wersjach glibc do 2.19 włącznie) \fB_BSD_SOURCE\fP lub \fB_SVID_SOURCE\fP.
.P
Pierwsza z nich jest stałą \fBMAXDNAME\fP zdefiniowaną w pliku nagłówkowym
\fI<arpa/nameser.h>\fP z nowszych wersji BIND\-a. Druga jest zgadywaniem
opartym na liście usług w bieżącym RFC dotyczącym przypisanych numerów
(Assigned Numbers RFC).
.SH PRZYKŁADY
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.
.P
.in +4n
.EX
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("stacja=%s, usługa=%s\[rs]n", hbuf, sbuf);
.EE
.in
.P
Następująca wersja sprawdza, czy adres gniazda ma odwrotne mapowanie adresu.
.P
.in +4n
.EX
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 udało się rozwiązać nazwy stacji");
else
    printf("stacja=%s\[rs]n", hbuf);
.EE
.in
.P
Przykładowy program używający \fBgetnameinfo\fP() można znaleźć w
\fBgetaddrinfo\fP(3).
.SH "ZOBACZ TAKŻE"
\fBaccept\fP(2), \fBgetpeername\fP(2), \fBgetsockname\fP(2), \fBrecvfrom\fP(2),
\fBsocket\fP(2), \fBgetaddrinfo\fP(3), \fBgethostbyaddr\fP(3), \fBgetservbyname\fP(3),
\fBgetservbyport\fP(3), \fBinet_ntop\fP(3), \fBhosts\fP(5), \fBservices\fP(5),
\fBhostname\fP(7), \fBnamed\fP(8)
.P
R.\& Gilligan, S.\& Thomson, J.\& Bound and W.\& Stevens, \fIBasic Socket Interface Extensions for IPv6\fP, RFC\ 2553, marzec 1999.
.P
Tatsuya Jinmei i Atsushi Onoe, \fIAn Extension of Format for IPv6 Scoped Addresses\fP, szkic internetowy, prace trwają
.UR ftp://ftp.ietf.org\:/internet\-drafts\:/draft\-ietf\-ipngwg\-scopedaddr\-format\-02.txt
.UE .
.P
Craig Metz, \fIProtocol Independence Using the Sockets API\fP, Proceedings of
the freenix track:  Coroczna techniczna konferencja USENIX 2000, czerwiec
2000
.ad l
.UR http://www.usenix.org\:/publications\:/library\:/proceedings\:/usenix2000\:/freenix\:/metzprotocol.html
.UE .
.PP
.SH TŁUMACZENIE
Tłumaczenie niniejszej strony podręcznika:
Robert Luberda <robert@debian.org>
i
Michał Kułach <michal.kulach@gmail.com>
.
.PP
Niniejsze tłumaczenie jest wolną dokumentacją. Bliższe informacje o warunkach
licencji można uzyskać zapoznając się z
.UR https://www.gnu.org/licenses/gpl-3.0.html
GNU General Public License w wersji 3
.UE
lub nowszej. Nie przyjmuje się ŻADNEJ ODPOWIEDZIALNOŚCI.
.PP
Błędy w tłumaczeniu strony podręcznika prosimy zgłaszać na adres listy
dyskusyjnej
.MT manpages-pl-list@lists.sourceforge.net
.ME .
