Narzędzia użytkownika

Narzędzia witryny


sk2:sockets_full

Różnice

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

Odnośnik do tego porównania

Both sides previous revision Poprzednia wersja
sk2:sockets_full [2025/10/16 22:26]
jkonczak
sk2:sockets_full [2026/10/08 21:26] (aktualna)
jkonczak
Linia 16: Linia 16:
 kierowane tylko na ten adres – np. 127.0.0.1 (''​INADDR_LOOPBACK''​) jeśli kierowane tylko na ten adres – np. 127.0.0.1 (''​INADDR_LOOPBACK''​) jeśli
 połączenia mają być ograniczone do połączeń z localhosta. połączenia mają być ograniczone do połączeń z localhosta.
 +\\
 +<​small>​Stałe ''​INADDR_ANY''​ i ''​INADDR_LOOPBACK''​ są w lokalnym porządku bajtów
 +(little/big endian), więc wpisując je np. do odpowiedniego pola struktury
 +''​sockaddr_in''​ trzeba zmienić porządek bajtów na sieciowy funkcją ''​htonl''​.
 +Dowolny adres IPv4 to 0.0.0.0, więc w tym szczególnym przypadku zmiana porządku
 +bajtów jest niepotrzebna.</​small>​
  
 **Wywołanie funkcji ''​listen''​ nakazuje systemowi operacyjnemu czekać na połączenia** (porównaj z: ''​connect''​). Wykonanie funkcji listen jest natychmiastowe – ta funkcja nie czeka na połączenie,​ tylko informuje system operacyjny że nowe połączenia przychodzące na ustawiony adres mają być kierowane na to gniazdo. \\ **Wywołanie funkcji ''​listen''​ nakazuje systemowi operacyjnemu czekać na połączenia** (porównaj z: ''​connect''​). Wykonanie funkcji listen jest natychmiastowe – ta funkcja nie czeka na połączenie,​ tylko informuje system operacyjny że nowe połączenia przychodzące na ustawiony adres mają być kierowane na to gniazdo. \\
-Argumentem funkcji ''​listen''​ jest ilość nowych połączeń które ​czekają +Argumentem funkcji ''​listen''​ jest ilość nowych połączeń które ​mogą czekać 
-w kolejce na odebranie (tj. połączeń dla których nie wykonano jeszcze funkcji +w kolejce na odebranie ​przez program ​(tj. połączeń dla których nie wykonano 
-''​accept''​)((Argument "​backlog"​ funkcji ''​listen''​ powinien się zawierać w+jeszcze funkcji ''​accept''​, ale system operacyjny odpowiedział klientowi że 
 +udało mu się połączyć)((Argument "​backlog"​ funkcji ''​listen''​ powinien się zawierać w
 zakresie ''​1''​÷''​SOMAXCONN''​ (w tej chwili o wartości [[https://​elixir.bootlin.com/​linux/​v6.17.1/​source/​include/​linux/​socket.h#​L298|4096 w Linuksie]]) i jest traktowany jako podpowiedź,​ tzn. system operacyjny może używać innego limitu niż podany w argumencie ''​listen''​.)). zakresie ''​1''​÷''​SOMAXCONN''​ (w tej chwili o wartości [[https://​elixir.bootlin.com/​linux/​v6.17.1/​source/​include/​linux/​socket.h#​L298|4096 w Linuksie]]) i jest traktowany jako podpowiedź,​ tzn. system operacyjny może używać innego limitu niż podany w argumencie ''​listen''​.)).
  
-Do odebrania nowych połączeń używa się funkcji ''​accept(…)''​. **Funkcja ''​accept''​ zwraca nowe gniazdo** reprezentujące nawiązane połączenie.+Do odebrania nowych połączeń używa się funkcji ''​accept(…)''​. **Funkcja ''​accept''​ 
 +zwraca nowe gniazdo** reprezentujące nawiązane połączenie. Jeśli w kolejce czeka 
 +już jakieś połączenie,​ funkcja ''​accept''​ natychmiast się kończy, w przeciwym 
 +razie blokuje się do czasu aż pojawi się nowy klient.
  
 <​html><​small></​html>​Tworzenie kolejnych deskryptorów plików oraz wyniki ''​lsof'',​ ''​strace''​ i ''​ss''​ są zaprezentowane [[sk2:​sockets_full:​tcp_srv_img|tutaj]]<​html></​small></​html>​ <​html><​small></​html>​Tworzenie kolejnych deskryptorów plików oraz wyniki ''​lsof'',​ ''​strace''​ i ''​ss''​ są zaprezentowane [[sk2:​sockets_full:​tcp_srv_img|tutaj]]<​html></​small></​html>​
Linia 47: Linia 57:
  
 Funkcja ''​accept''​ (podobnie jak wprowadzana za chwilę ''​recvfrom''​) może przekazać informację o adresie z którego nawiązano połączenie. W tym celu należy jej podać: Funkcja ''​accept''​ (podobnie jak wprowadzana za chwilę ''​recvfrom''​) może przekazać informację o adresie z którego nawiązano połączenie. W tym celu należy jej podać:
-  * gdzie ma zapisać ten adres – tj. podać adres struktury sockaddr (drugi argument)+  * gdzie ma zapisać ten adres – tj. podać adres struktury ​''​sockaddr'' ​(drugi argument)
   * adres zmiennej, która w momencie wywołania ''​accept''​ ma wpisany rozmiar przekazanej struktury (trzeci argument)<​html><​small style="​user-select:​ none;"></​html><​code cpp>   * adres zmiennej, która w momencie wywołania ''​accept''​ ma wpisany rozmiar przekazanej struktury (trzeci argument)<​html><​small style="​user-select:​ none;"></​html><​code cpp>
 sockaddr_in nazwa_zmiennej;​ sockaddr_in nazwa_zmiennej;​
sk2/sockets_full.txt · ostatnio zmienione: 2026/10/08 21:26 przez jkonczak