Różnice między wybraną wersją a wersją aktualną.
| Both sides previous revision Poprzednia wersja | |||
|
sk2:sockets_netdbs [2026/10/15 14:12] jkonczak |
sk2:sockets_netdbs [2026/10/15 18:38] (aktualna) jkonczak |
||
|---|---|---|---|
| Linia 4: | Linia 4: | ||
| Najstarsze funkcje do zmiany to ''gethostbyname'' i ''gethostbyaddr''. | Najstarsze funkcje do zmiany to ''gethostbyname'' i ''gethostbyaddr''. | ||
| - | Funkcje są przestarzałe i powszechnie używane. Problemy z ich działaniem obrazuje poniższy kod: | + | Te funkcje są przestarzałe i powszechnie używane. |
| + | Problemy z ich działaniem obrazuje poniższy kod: | ||
| <code cpp ghbn.cpp> | <code cpp ghbn.cpp> | ||
| #include <unistd.h> | #include <unistd.h> | ||
| Linia 105: | Linia 106: | ||
| const struct sockaddr *addr, // adres (IPv4 lub IPv6) do przerobienia na tekst | const struct sockaddr *addr, // adres (IPv4 lub IPv6) do przerobienia na tekst | ||
| socklen_t addrlen, // ilość bajtów powyższego adresu | socklen_t addrlen, // ilość bajtów powyższego adresu | ||
| - | // | + | |
| char * host, // wskaźnik na bufor do którego zostanie wpisany adres IP (lub nazwa domenowa) jako tekst | char * host, // wskaźnik na bufor do którego zostanie wpisany adres IP (lub nazwa domenowa) jako tekst | ||
| size_t hostLen, // ilość miejsca w powyższym buforze | size_t hostLen, // ilość miejsca w powyższym buforze | ||
| // (dla zmiany IP na tekst powinien wystarczyć bufor o długości NI_MAXHOST) | // (dla zmiany IP na tekst powinien wystarczyć bufor o długości NI_MAXHOST) | ||
| + | |||
| char * port, // wskaźnik na bufor do którego zostanie wpisany numer (lub nazwa) portu jako tekst | char * port, // wskaźnik na bufor do którego zostanie wpisany numer (lub nazwa) portu jako tekst | ||
| size_t portLen, // ilość miejsca w powyższym buforze | size_t portLen, // ilość miejsca w powyższym buforze | ||
| // (dla zmiany portu na tekst powinien wystarczyć bufor o długości NI_MAXSERV) | // (dla zmiany portu na tekst powinien wystarczyć bufor o długości NI_MAXSERV) | ||
| + | |||
| int flags); // pole flag, pozwalające wybrać m. inn. czy IP i port mają być tłumaczone na numery czy nazwy | int flags); // pole flag, pozwalające wybrać m. inn. czy IP i port mają być tłumaczone na numery czy nazwy | ||
| </code> | </code> | ||
| Linia 273: | Linia 276: | ||
| * odczyta z listy argumentów adres i numer portu | * odczyta z listy argumentów adres i numer portu | ||
| * użyje funkcji ''getaddrinfo'' z podpowiedzią żądającą protokołu TCP | * użyje funkcji ''getaddrinfo'' z podpowiedzią żądającą protokołu TCP | ||
| - | * utworzy gniazdo korzystając z rodziny adresów zwróconej przez ''getaddrinfo'' | + | * utworzy gniazdo podając funkcji ''socket'' jako każdy z argumentów odpowiednie pole ze struktury zwróconej przez ''getaddrinfo'' (w tej strukturze jest domena, typ i protokół komunikacyjny) |
| - | * połączy się funkcją connect korzystając ze struktury sockaddr i informacji o jej długości zwróconej przez ''getaddrinfo'' | + | * połączy się funkcją ''connect'' podając jako każdy poza pierwszym argumentem odpowiednie pole ze struktury zwróconej przez ''getaddrinfo'' (w tej strukturze jest gotowy wskaźnik na ''sockaddr'' i rozmiar tam wskazanego tego adresu) |
| <html><div style=margin-top:-1.2em></div></html> | <html><div style=margin-top:-1.2em></div></html> | ||
| W tym zadaniu wszystkie argumenty funkcji ''socket'' i wszystkie poza deskryptorem | W tym zadaniu wszystkie argumenty funkcji ''socket'' i wszystkie poza deskryptorem | ||
| - | gniazda argumenty funkcji ''connect'' mają być brane z wyników funkcji ''getaddrinfo'' | + | gniazda argumenty funkcji ''connect'' mają być brane z wyników funkcji ''getaddrinfo''. |
| + | Próbuj połączyć się tylko do pierwszej ze zwróconych struktur. | ||
| <small> | <small> | ||