www.digipedia.pl - manuale

getaddrinfo(3)

getaddrinfo(3) Podręcznik programisty Linuksa getaddrinfo(3)
Tłumaczenie na podstawie wersji man-pages 1.47 - grudzień 2001 Andrzej Krzysztofowicz <ankry@mif.pg.gda.pl> ------------ Copyright 2000 Sam Varshavchik <mrsam@courier-mta.com>
 
Permission is granted to make and distribute verbatim copies of this manual provided the copyright notice and this permission notice are preserved on all copies.
 
Permission is granted to copy and distribute modified versions of this manual under the conditions for verbatim copying, provided that the entire resulting derived work is distributed under the terms of a permission notice identical to this one
 
Since the Linux kernel and libraries are constantly changing, this manual page may be incorrect or out-of-date. The author(s) assume no responsibility for errors or omissions, or for damages resulting from the use of the information contained herein. The author(s) may not have taken the same level of care in the production of this manual, which is licensed free of charge, as they might when working professionally.
 
Formatted or processed versions of this manual, if unaccompanied by the source, must acknowledge the copyright and authors of this work.
 
References: RFC 2553 ------------

NAZWA

getaddrinfo - tłumaczenie adresów i usług sieciowych

SKŁADNIA

#include <sys/types.h> #include <sys/socket.h> #include <netdb.h>
 
int getaddrinfo(const char *node, const char *service, const struct addrinfo *hints, struct addrinfo **res);
 
void freeaddrinfo(struct addrinfo *res);
 
const char *gai_strerror(int errcode);

OPIS

Uwaga! To tłumaczenie może być nieaktualne!

Funkcja getaddrinfo(3) łączy w pojedynczym interfejsie funkcjonalność udostępnianą przez funkcje getipnodebyname(3), getipnodebyaddr(3), getservbyname (3) i getservbyport(3). Przystosowana do wielowątkowości funkcja getaddrinfo(3) tworzy jedną lub więcej struktur adresowych gniazda, które mogą być wykorzystane przez funkcje systemowe bind(2) i connect(2) do utworzenia gniazda klienta lub serwera.

Funkcja getaddrinfo(3) nie jest ograniczona do tworzenia struktur adresowych gniazd IPv4. Gniazda IPv6 mogą również być tworzone za jej pomocą, o ile dostępne jest wspomaganie dla IPv6. Te struktury adresowe gniazd mogą być bezpośrednio wykorzystane przez bind(2) i connect(2) do sporządzenia gniazda klienta lub serwera.

Struktura addrinfo używana przez tę funkcję zawiera następujące pola:

 
struct addrinfo { int ai_flags; int ai_family; int ai_socktype; int ai_protocol; size_t ai_addrlen; struct sockaddr *ai_addr; char *ai_canonname; struct addrinfo *ai_next; };

getaddrinfo(3) ustawia res, aby wskazywało na dynamicznie zaalokowaną listę struktur addrinfo, dowiązaną do pola ai_next. Istnieje kilka powodów, dla których lista może zawierać więcej niż jedną strukturę addrinfo, włączając w to: posiadanie przez host wielu interfejsów sieciowych oraz dostępność tej samej usługi poprzez wiele protokołów gniazda (na przykład, gdy jednym z nich jest SOCK_STREAM, a innym SOCK_DGRAM).

Pola ai_family, ai_socktype i ai_protocol mają to samo znaczenie jako odpowiednie parametry wywołania systemowego socket(2). Funkcja getaddrinfo(3) zwraca adresy gniazd IPv4 lub IPv6 (ai_family zostanie ustawione albo na PF_INET albo na PF_INET6).

Parametr hints określa preferowany rodzaj gniazda lub protokół. Wartość NULL dla hints określa, że akceptowany jest dowolny adres sieciowy lub protokół. Jeśli parametr ten ma wartość różną od NULL, wskazuje on na strukturę addrinfo, w której pola ai_family, ai_socktype i ai_protocol określają preferowany rodzaj gniazda. PF_UNSPEC w ai_family określa dowolną rodzinę protokołów (na przykład IPv4 lub IPv6). 0 w ai_socktype lub ai_protocol stwierdza, że akceptowalny jest również dowolny rodzaj gniazda lub protokół. Pole ai_flags zawiera dodatkowe, zdefiniowane poniżej, opcje. Wiele znaczników podaje się jako ich logiczne OR. Wszystkie pozostałe pola parametru hints muszą zawierać albo 0 albo wskaźnik NULL.

Parametry node i service mogą być równe NULL, ale nie oba naraz. node zawiera albo adres sieciowy w postaci numerycznej (w formacie dziesiętnych liczb rozdzielonych kropkami dla IPv4, a w formacie szesnastkowym dla IPv6) albo nazwę hosta, dla której adresy sieciowe będą poszukiwane i rozwiązane. Jeśli pole ai_flags parametru hints zawiera znacznik AI_NUMERICHOST, to parametr node musi być adresem sieciowym w postaci numerycznej. Znacznik AI_NUMERICHOST eliminuje jakiekolwiek, potencjalnie długotrwałe, poszukiwania adresu sieciowego hosta.

Funkcja getaddrinfo(3) tworzy listę struktur addrinfo, po jednej dla każdej podstawy ograniczenia adresów sieciowych narzuconej przez parametr hints. Gdy ai_flags w hints zawiera znacznik AI_CANONNAME, to ai_canonname jest ustawiane tak, aby wskazywało na oficjalną nazwę hosta. ai_family, ai_socktype i ai_protocol zawierają parametry tworzenia gniazda. Wskaźnik do adresu gniazda jest umieszczany w polu ai_addr, a długość adresu gniazda w bajtach jest umieszczana w polu ai_addrlen.

Gdy node jest równe NULL, inicjalizacja adresu sieciowego w każdej ze struktur gniazda zależy od znacznika AI_PASSIVE, który jest ustawiany w polu ai_flags parametru hints. Gdy znacznik AI_PASSIVE jest ustawiony, to adres sieciowy w każdej ze struktur gniazda pozostanie nieokreślony. Jest to wykorzystywane przez programy serwerów, które zamierzają przyjmować połączenia od klientów na dowolny adres sieciowy. Gdy znacznik AI_PASSIVE nie jest ustawiony, to adres sieciowy zostanie ustawiony na adres interfejsu loopback. Jest to wykorzystywane przez programy klienckie, które zamierzają połączyć się z serwerem działającym na tym samym hoście.

service ustawia numer portu w adresie sieciowym każdej ze struktur gniazda. Jeśli service jest różne od NULL, to numer portu pozostanie niezainicjalizowany.

Funkcja freeaddrinfo(3) zwalnia pamięć przydzieloną dla dynamicznie zaalokowanej listy res.

WARTOŚĆ ZWRACANA

getaddrinfo(3) zwraca 0, gdy zakończy się pomyślnie, a w przeciwnym razie jeden z następujących niezerowych kodów błędów:
EAI_FAMILY
Zupełny brak wsparcia dla żądanej rodziny adresów.
EAI_SOCKTYPE
Zupełny brak wsparcia dla żądanego rodzaju gniazda.
EAI_BADFLAGS
ai_flags zawiera nieprawidłowe znaczniki.
EAI_NONAME
node lub service jes nieznane. Ten błąd jest również zwracany, gdy zarówno node, jak i service są równe NULL.
EAI_SERVICE
Żądana usługa nie jest dostępna dla zadanego rodzaju gniazda. Może ona jednak być dostępna dla innego rodzaju gniazda.
EAI_ADDRFAMILY
Podany host nie posiada żadnego adresu sieciowego dla zadanej rodziny adresów.
EAI_NODATA
Podany host istnieje, ale nie zdefiniowano dla niego żadnego adresu sieciowego.
EAI_MEMORY
Brak pamięci.
EAI_FAIL
Serwer nazw zwrócił błąd trwały.
EAI_AGAIN
Serwer nazw zwrócił błąd tymczasowy. Należy spróbować później.
EAI_SYSTEM
Inny błąd systemowy; szczegółowe informacje zawarte są w errno.

Funkcja gai_strerror(3) tłumaczy te kody błędów na czytelny dla człowieka napis, odpowiedni dla zgłaszania błędów.

ZOBACZ TAKŻE

getipnodebyname(3), getipnodebyaddr(3)

INFORMACJE O TŁUMACZENIU

Powyższe tłumaczenie pochodzi z nieistniejącego już Projektu Tłumaczenia Manuali i może nie być aktualne. W razie zauważenia różnic między powyższym opisem a rzeczywistym zachowaniem opisywanego programu lub funkcji, prosimy o zapoznanie się z oryginalną (angielską) wersją strony podręcznika za pomocą polecenia:
man --locale=C 3 getaddrinfo

Prosimy o pomoc w aktualizacji stron man - więcej informacji można znaleźć pod adresem http://sourceforge.net/projects/manpages-pl/.

2000-12-18 Linux