.\" -*- 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 \fP \fB#include \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\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\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; /* input */ socklen_t addrlen; /* input */ 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\[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; /* input */ socklen_t addrlen; /* input */ char hbuf[NI_MAXHOST]; \& if (getnameinfo(addr, addrlen, hbuf, sizeof(hbuf), NULL, 0, NI_NAMEREQD)) printf("could not resolve hostname"); else printf("host=%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 Autorami polskiego tłumaczenia niniejszej strony podręcznika są: Robert Luberda i Michał Kułach . .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 .