Różnice między wybraną wersją a wersją aktualną.
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> | ||