Narzędzia użytkownika

Narzędzia witryny


sk2:sockets_caveats

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_caveats [2024/10/24 00:49]
jkonczak
sk2:sockets_caveats [2024/10/31 11:42] (aktualna)
jkonczak [Funkcje blokujące / nieblokujące]
Linia 76: Linia 76:
   * ''​accept''​ (czeka aż przyjdzie nowe połączenie)   * ''​accept''​ (czeka aż przyjdzie nowe połączenie)
   * ''​gethostbyname''​ / ''​getaddrinfo''​ (czeka na odpowiedź od serwera nazw, o ile zaszła konieczność odpytania).   * ''​gethostbyname''​ / ''​getaddrinfo''​ (czeka na odpowiedź od serwera nazw, o ile zaszła konieczność odpytania).
-<​html><​div style="​margin-top:​-1.4em"></​html>​+<​html><​div style="​margin-top:​-1.4em"​></​div></​html>​
 Funkcje wykonujące tylko operacje lokalne są nieblokujące. Funkcje wykonujące tylko operacje lokalne są nieblokujące.
 \\ \\
-Przykłady takich funkcji (sieciowych) to: ''​socket'', ​ ''​bind'',​ ''​listen'',​ ''​setsockopt'',​ ''​gethostbyname''​ / ''​getaddrinfo''​ (o ile funkcja nie odpytywała serwera nazw). +Przykłady takich funkcji (sieciowych) to: ''​socket'', ​ ''​bind'',​ ''​listen'',​ ''​setsockopt'',​ ''​gethostbyname''​ / ''​getaddrinfo''​ (o ile funkcja nie odpytywała serwera nazw, co można wymusić odpowiednimi flagami).\\ 
-<html></div></html>+<small>Funkcja zamykająca połączenie – ''​shutdown''​ – jest nieblokująca,​ natomiast funkcja zamykająca gniazdo – ''​close''​ – może się blokować dla gniazd połączeniowych dla których ustawiono na nim opcję SO_LINGER na czas wysłania danych z bufora systemowego,​ ale nie dłużej niż ilość sekund podana w opcji SO_LINGER[[https:​//pubs.opengroup.org/​onlinepubs/​9799919799/​functions/​close.html|[1]]].</​small>
  
 Można zmienić domyśle blokujące zachowanie przestawiając gniazdo w //tryb nieblokujący//​. Można zmienić domyśle blokujące zachowanie przestawiając gniazdo w //tryb nieblokujący//​.
Linia 164: Linia 164:
 <​html><​div style="​margin-top:​-1.4em"></​div></​html>​ <​html><​div style="​margin-top:​-1.4em"></​div></​html>​
 Następnie napisz serwer TCP który po odebraniu połączenia,​ do jego Następnie napisz serwer TCP który po odebraniu połączenia,​ do jego
-zamknięcia,​ w pętli odbiera do 1MB danych. \\ Sprawdź ​w każdej odebranej porcji+zamknięcia,​ w pętli odbiera do 1MB danych, a następnie sprawdza ​w każdej odebranej porcji
 na jakich pozycjach znajdują się znaki '​b'​ i '​e'​.\\ na jakich pozycjach znajdują się znaki '​b'​ i '​e'​.\\
-__Uwaga:__ w tym zdaniu pogram serwera i klienta należy uruchamiać na różnych ​ +Przed uruchomieniem programu, zmień ustawienia swojego interfejsu sieciowego poleceniami: 
-komputerach.+<​html><​div style="​margin-top:​-1.4em"></​div></​html>​ 
 +  ip link set lo mtu 1500 
 +  tc qdisc add dev lo root netem delay 2ms 3ms 90% distribution pareto 
 +<​html><​div style="​margin-top:​-1.4em"></​div></​html>​ 
 +Aby wrócić do domyślnych ustawień, wpisz: 
 +<​html><​div style="​margin-top:​-1.4em"></​div></​html>​ 
 +  ip link set lo mtu 65535 
 +  tc qdisc del dev lo root
 </​small>​ </​small>​
  
sk2/sockets_caveats.1729723775.txt.gz · ostatnio zmienione: 2024/10/24 00:49 przez jkonczak