Różnice między wybraną wersją a wersją aktualną.
Both sides previous revision Poprzednia wersja | |||
sk2:sockets_intro [2024/10/07 20:27] jkonczak |
sk2:sockets_intro [2025/10/02 22:24] (aktualna) jkonczak |
||
---|---|---|---|
Linia 72: | Linia 72: | ||
API stworzone dla systemu BSD zostało przyjęte przez praktycznie wszystkie systemy operacyjne (POSIX socket API, WinSock). | API stworzone dla systemu BSD zostało przyjęte przez praktycznie wszystkie systemy operacyjne (POSIX socket API, WinSock). | ||
- | Pełen opis: [[http://www.cs.put.poznan.pl/ddwornikowski/sieci/sieci2/bsdsockets.html]] oraz [[https://en.wikipedia.org/wiki/Berkeley_sockets]] | + | Po więcej informacji o BSD Socket API zajrzyj na [[https://en.wikipedia.org/wiki/Berkeley_sockets]]. |
''man 7 socket tcp udp''\\ | ''man 7 socket tcp udp''\\ | ||
Linia 89: | Linia 89: | ||
MSB/LSB first – to głównie problem producentów sprzętu. | MSB/LSB first – to głównie problem producentów sprzętu. | ||
Little/big endian - to problem programistów.\\ | Little/big endian - to problem programistów.\\ | ||
- | [[https://en.wikipedia.org/wiki/Most_significant_bit]] | + | [[https://en.wikipedia.org/wiki/Bit_numbering#Most-_vs_least-significant_bit_first]] |
[[https://pl.wikipedia.org/wiki/Kolejność_bajtów]] | [[https://pl.wikipedia.org/wiki/Kolejność_bajtów]] | ||
<html></small></html> | <html></small></html> | ||
Linia 98: | Linia 98: | ||
uint16_t networkEndianessPort = htons(hostEndianessPort); | uint16_t networkEndianessPort = htons(hostEndianessPort); | ||
</code> | </code> | ||
- | Opis funkcji pomocniczych – patrz ''man byteorder'' lub [[http://www.cs.put.poznan.pl/ddwornikowski/sieci/sieci2/bsdsockets.html#funkcje-pomocnicze|strona Darka Dwornikowskiego]] | + | Opis funkcji pomocniczych – patrz ''man byteorder'' |
==== Zapis adresu gniazda ==== | ==== Zapis adresu gniazda ==== | ||
Linia 108: | Linia 108: | ||
Ta struktura nie pozwala na bezpośrednie wykorzystanie. Zamiast tego dla IPv4 należy używać **''sockaddr_in''** (w C – ''struct sockaddr_in'') | Ta struktura nie pozwala na bezpośrednie wykorzystanie. Zamiast tego dla IPv4 należy używać **''sockaddr_in''** (w C – ''struct sockaddr_in'') | ||
- | Opis struktury – patrz ''man 7 ip'' i ''man netinet_in.h'' lub | + | Opis struktury – patrz ''man sockaddr'', ''man 7 ip'' i ''man netinet_in.h'' |
- | [[http://www.cs.put.poznan.pl/ddwornikowski/sieci/sieci2/bsdsockets.html#glowne-funkcje-interfejsu-gniazd|strona Darka]] | + | |
<html><small></html> | <html><small></html> | ||
C nie pozwala na dziedziczenie, więc zamiast tego ([[https://en.wikipedia.org/wiki/Type_punning#Sockets_example]]) struktura ''sockaddr'' ma kilka "specjalizacji" dla konkretnej rodziny adresów: | C nie pozwala na dziedziczenie, więc zamiast tego ([[https://en.wikipedia.org/wiki/Type_punning#Sockets_example]]) struktura ''sockaddr'' ma kilka "specjalizacji" dla konkretnej rodziny adresów: | ||
+ | <html><div style="margin-top:-1.4em"></div></html> | ||
*''sockaddr_in'' (INET, czyli IPv4) | *''sockaddr_in'' (INET, czyli IPv4) | ||
*''sockaddr_in6'' (INET6, czyli IPv6) | *''sockaddr_in6'' (INET6, czyli IPv6) | ||
Linia 136: | Linia 136: | ||
* trzeci argument funkcji connect to rozmiar struktury opisującej adres – ''sizeof()'' zmiennej lub typu | * trzeci argument funkcji connect to rozmiar struktury opisującej adres – ''sizeof()'' zmiennej lub typu | ||
* przed wywołaniem funkcji ''close()'' zamykał połączenie funkcją ''shutdown()''; \\ <html><small></html>w funkcji ''shutdown()'' można osobno zakończyć nadawanie i odbiór, drugi argument określa co zakończyć – ''SHUT_RD'' / ''SHUT_WR'' / ''SHUT_RDWR''<html></small></html> | * przed wywołaniem funkcji ''close()'' zamykał połączenie funkcją ''shutdown()''; \\ <html><small></html>w funkcji ''shutdown()'' można osobno zakończyć nadawanie i odbiór, drugi argument określa co zakończyć – ''SHUT_RD'' / ''SHUT_WR'' / ''SHUT_RDWR''<html></small></html> | ||
- | Opis funkcji – [[https://www.cs.put.poznan.pl/ddwornikowski/sieci/sieci2/bsdsockets.html#glowne-funkcje-interfejsu-gniazd|strona Darka]] lub ''man 3 …'' / ''man 3p …''\\ | + | Opis funkcji znajdziesz w podręczniku systemowym (''man 3 …'' / ''man 3p …'')\\ |
Potrzebne pliki nagłówkowe to: | Potrzebne pliki nagłówkowe to: | ||
<code cpp> | <code cpp> |