.\" %%%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. .\" .\"******************************************************************* .\" This file is distributed under the same license as original manpage .\" Copyright of the original manpage: .\" Copyright © .\" Copyright © of Polish translation: .\" Robert Luberda , 2005, 2006, 2012, 2013. .\" Michał Kułach , 2014, 2016. .TH GETNAMEINFO 3 2016\-03\-15 GNU "Podręcznik programisty Linuksa" .SH NAZWA getnameinfo \- tłumaczenie adresu na nazwę w sposób niezależny od protokołu .SH SKŁADNIA .nf \fB#include \fP \fB#include \fP .sp \fBint getnameinfo(const struct sockaddr *\fP\fIaddr\fP\fB, socklen_t \fP\fIaddrlen\fP\fB,\fP \fB char *\fP\fIhost\fP\fB, socklen_t \fP\fIhostlen\fP\fB,\fP \fB char *\fP\fIserv\fP\fB, socklen_t \fP\fIservlen\fP\fB, int \fP\fIflags\fP\fB);\fP .fi .sp .in -4n Wymagane ustawienia makr biblioteki glibc (patrz \fBfeature_test_macros\fP(7)): .ad l .in .sp \fBgetnameinfo\fP(): Od glibc 2.22: _POSIX_C_SOURCE >= 201112L Glibc 2.21 i wcześniejsze: _POSIX_C_SOURCE .ad b .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. Argument \fIsa\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. Funkcja wywołująca może określić, że nazwa komputera (lub nazwa serwisu) 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 serwisu) musi być ustawiony. 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 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. .TP \fBNI_NOFQDN\fP Jeżeli ustawiono, to zwracana jest tylko lokalna część nazwy komputera, a nie jego pełną domenowa nazwa sieciowa. .TP \fBNI_NUMERICHOST\fP .\" For example, by calling .\" .BR inet_ntop () .\" instead of .\" .BR gethostbyaddr (). .\" POSIX.1-2003 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 tej flagi i nie można znaleźć nazwy komputera). .TP \fBNI_NUMERICSERV\fP 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). .SS "Rozszerzenia getnameinfo() dotyczące międzynarodowych nazw domen" .PP 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 flagi: .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, \fBNI_IDN_USE_STD3_ASCII_RULES\fP 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. .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 serwisu. .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. .PP 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 /etc/hosts .br /etc/nsswitch.conf .br /etc/resolv.conf .SH WERSJE \fBgetnameinfo\fP() jest dostarczane przez glibc od wersji 2.1. .SH ATRYBUTY Informacje o pojęciach używanych w tym rozdziale można znaleźć w podręczniku \fBattributes\fP(7). .TS allbox; lb lb lb l l l. Interfejs Atrybut Wartość T{ \fBgetnameinfo\fP() T} Bezpieczeństwo wątkowe MT\-Safe env locale .TE .SH "ZGODNE Z" POSIX.1\-2001, POSIX.1\-2008, RFC\ 2553. .SH UWAGI Aby pomóc programiście w wyborze odpowiedniego rozmiaru buforów, w \fI\fP zdefiniowano stałe .in +4n .nf #define NI_MAXHOST 1025 #define NI_MAXSERV 32 .fi .in 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. .PP Pierwsza z nich jest stałą \fBMAXDNAME\fP zdefiniowaną w pliku nagłówkowym \fI\fP 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 \fIhostlen\fP i \fIservlen\fP były wprowadzane jako \fIsize_t\fP. .SH 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. .in +4n .nf 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\en", hbuf, sbuf); .fi .in Następująca wersja sprawdza, czy adres gniazda ma odwrotne mapowanie adresu. .in +4n .nf 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\en", hbuf); .fi .in .PP 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) R. Gilligan, S. Thomson, J. Bound i W. Stevens, \fIBasic Socket Interface Extensions for IPv6\fP, RFC\ 2553, marzec 1999. 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 . 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 . .SH "O STRONIE" Angielska wersja tej strony pochodzi z wydania 4.07 projektu Linux \fIman\-pages\fP. 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/. .SH TŁUMACZENIE Autorami polskiego tłumaczenia niniejszej strony podręcznika man są: Robert Luberda i Michał Kułach . .PP 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ą \fB 4.07 \fPoryginału.