Narzędzia użytkownika

Narzędzia witryny


sk2:sockets_netdbs

Różnice

Różnice między wybraną wersją a wersją aktualną.

Odnośnik do tego porównania

Both sides previous revision Poprzednia wersja
Nowa wersja
Poprzednia wersja
sk2:sockets_netdbs [2020/10/20 12:55]
jkonczak [Tradycyjna funkcja gethostbyname]
sk2:sockets_netdbs [2023/10/17 14:03] (aktualna)
jkonczak
Linia 10: Linia 10:
 #include <​arpa/​inet.h>​ #include <​arpa/​inet.h>​
 #include <​netdb.h>​ #include <​netdb.h>​
 +#include <​cstdio>​
  
 int main() { int main() {
Linia 36: Linia 37:
 <​html><​small></​html>​ <​html><​small></​html>​
 Kompilator GCC udostępnia wiele rozszerzeń "​łatających"​ braki standardów [[https://​gcc.gnu.org/​onlinedocs/​gcc/​C-Extensions.html]].\\ Kompilator GCC udostępnia wiele rozszerzeń "​łatających"​ braki standardów [[https://​gcc.gnu.org/​onlinedocs/​gcc/​C-Extensions.html]].\\
-Towarzysząca mu biblioteka [[https://​www.gnu.org/​software/​libc/​|glibc]] wprowadza między innymi funkcję ''​gethostbyname_r''​ (funkcje ''​*_r''​ są reentrant, tj. można je łatwiej stosować w aplikacjach wielowątkowych [[https://​en.wikipedia.org/​wiki/​Reentrancy_%28computing%29]]). ''​gethostbyname_r''​ może być używana współbieżnie.+Towarzysząca mu biblioteka [[https://​www.gnu.org/​software/​libc/​|glibc]] wprowadza między innymi funkcję ''​[[https://​www.gnu.org/​software/​libc/​manual/​html_node/​Host-Names.html#​index-gethostbyname_005fr|gethostbyname_r]]''​ (funkcje ''​*_r''​ są reentrant, tj. można je łatwiej stosować w aplikacjach wielowątkowych [[https://​en.wikipedia.org/​wiki/​Reentrancy_%28computing%29]]). ''​gethostbyname_r''​ może być używana współbieżnie.
  
 <code cpp> <code cpp>
Linia 42: Linia 43:
 int status, retval; int status, retval;
 char buffer[4096];​ char buffer[4096];​
-retval = gethostbyname_r("​fc.put.poznan.pl",​ &he, buffer, sizeof(buffer),​ &​resptr,​ &​status);​+retval = gethostbyname_r("​cat.put.poznan.pl",​ &he, buffer, sizeof(buffer),​ &​resptr,​ &​status);​
 if(retval) if(retval)
     error(1,​0,"​gethostbyname_r error: %s", hstrerror(status));​     error(1,​0,"​gethostbyname_r error: %s", hstrerror(status));​
Linia 74: Linia 75:
 };</​code><​html></​small></​html>​ };</​code><​html></​small></​html>​
  
-Pełen opis funkcji ''​getaddrinfo''​ i struktury ''​addrinfo''​ znajdziesz na stronie manuala do getaddrinfo (''​man getaddrinfo''​).+Pełen opis funkcji ''​getaddrinfo''​ i struktury ''​addrinfo''​ znajdziesz na stronie manuala do getaddrinfo (''​man getaddrinfo''​) ​<​html><​small></​html>​ lub w standardzie POSIX ([[https://​pubs.opengroup.org/​onlinepubs/​9699919799/​functions/​freeaddrinfo.html|[1]]],​ [[https://​pubs.opengroup.org/​onlinepubs/​9699919799/​functions/​getnameinfo.html|[2]]],​ [[https://​pubs.opengroup.org/​onlinepubs/​9699919799/​functions/​gai_strerror.html|[3]]])<​html></​small></​html>​. 
 +\\ 
 +Uwaga: ''​getaddrinfo''​ w razie sukcesu zwraca ''​0'',​ a w przypadku błędu zwraca jego kod.
  
 Przykłady użycia: Przykłady użycia:
Linia 92: Linia 95:
     addrinfo * resolved;     addrinfo * resolved;
     ​     ​
 +    // Z sieci bezprzewodowej PP (lub innych używających serwerów nazw z podsieci 150.254.5.0/​24)
 +    // proszę zmienić "​pool.ntp.org"​ na "​onet.pl"​ - Dział Obsługi i Eksploatacji z niezrozumiałych
 +    // przyczyn cenzuruje odpowiedzi z DNS 
     int res = getaddrinfo("​pool.ntp.org",​ "​ntp",​ &hints, &​resolved);​     int res = getaddrinfo("​pool.ntp.org",​ "​ntp",​ &hints, &​resolved);​
     ​     ​
sk2/sockets_netdbs.1603191333.txt.gz · ostatnio zmienione: 2020/10/20 12:55 (edycja zewnętrzna)