table of contents
other languages
other sections
UDP(7) | Podręcznik programisty Linuksa | UDP(7) |
NAZWA¶
udp - Protokół datagramów użytkownika dla IPv4SKŁADNIA¶
#include <sys/socket.h>OPIS¶
Jest to implementacja opisanego w RFC 768 protokołu datagramów użytkownika. Implementuje usługę bezpołączeniowych, niepewnych pakietów datagramowych. Kolejność pakietów może się zmienić przed ich dotarciem do celu, mogą one też zostać powielone. UDP generuje i sprawdza sumy kontrolne, aby wykryć błędy transmisji.Format adresu¶
UDP stosuje format adresu IPv4 sockaddr_in opisany w ip(7).Obsługa błędów¶
Wszystkie błędy krytyczne są przekazywane do programu użytkownika jako wartość zwracana, nawet gdy gniazdo nie jest połączone. Dotyczy to także błędów asynchronicznych otrzymywanych z sieci. Można też otrzymać błąd dotyczący pakietu wcześniej wysłanego z danego gniazda. To zachowanie różni się od wielu innych implementacji gniazd BSD, które nie przekazują żadnych błędów, gdy gniazdo nie jest połączone. Zachowanie Linuksa ma oparcie w RFC 1122.Interfejsy /proc¶
Systemowe ustawienia parametrów można zmieniać, używając plików z katalogu /proc/sys/net/ipv4/.- udp_mem (od Linuksa 2.6.25)
- Jest wektorem trzech liczb całkowitych zawierających numery stron, które mogą być kolejkowane przez wszystkie gniazda UDP.
- min
- Do chwili przekroczenia podanej liczny stron, UDP nie przejmuje się zużyciem pamięci. Kiedy ilość pamięci zaalokowanej przez UDP przekroczy tę liczbę, UDP zaczyna zmniejszać zużycie pamięci.
- pressure
- Wartość została wprowadzona, naśladując tcp_mem (patrz tcp(7))
- max
- Liczba stron, które mogą być kolejkowane przez wszystkie gniazda UDP.
- Domyślne wartości powyższych trzech pozycji są wyliczane podczas startu systemu na podstawie ilości dostępnej pamięci.
- udp_rmem_min (liczba całkowita; wartość domyślna: PAGE_SIZE; od Linuksa 2.6.25)
- Minimalny rozmiar, bajtach, bufora otrzymywania używanego z umiarem przez gniazda UDP. Każde gniazdo UDP jest w stanie użyć tego rozmiaru do otrzymywania danych, nawet jeśli całkowita liczba stron gniazd UDP przekroczy udp_mem.
- udp_wmem_min (liczba całkowita; wartość domyślna: PAGE_SIZE; od Linuksa 2.6.25)
- Minimalny rozmiar, bajtach, bufora wysyłania używanego z umiarem przez gniazda UDP. Każde gniazdo UDP jest w stanie użyć tego rozmiaru do wysyłania danych, nawet jeśli całkowita liczba stron gniazd UDP przekroczy udp_mem.
Opcje gniazda¶
Aby ustawić lub pobrać opcję gniazda UDP, należy wywołać getsockopt(2) w celu odczytania lub setsockopt(2) w celu zapisania opcji, ustawiając argument poziomu opcji na IPPROTO_UDP.- UDP_CORK (od Linuksa 2.5.44)
- Jeśli ta opcja zostanie włączona, to wszystkie dane na wyjściu tego gniazda są łączone do pojedynczego datagramu, który zostanie wysłany, kiedy ta opcja zostanie wyłączona. Opcja ta nie powinna być używana w kodzie, który w zamierzeniu ma być przenośny.
Kontrolki systemowe (ioctl)¶
Do poniższych kontrolek wejścia/wyjścia można uzyskać dostęp za pomocą funkcji ioctl(2). Prawidłowa składnia to:int value; error = ioctl(udp_socket, ioctl_type, &value);
- FIONREAD (SIOCINQ)
- Pobiera jako argument wskaźnik do liczby całkowitej. Zwraca w tej zmiennej rozmiar następnego oczekującego datagramu lub 0, w razie braku oczekujących datagramów. Ostrzeżenie: FIONREAD nie daje możliwości rozróżnienia przypadku braku datagramów od przypadku, w którym następny oczekujący datagram zawiera zero bajtów danych. Żeby rozróżnić takie sytuacje bezpieczniej jest używać select(2), poll(2) lub epoll(7).
- TIOCOUTQ (SIOCOUTQ)
- Zwraca liczbę bajtów danych w lokalnej kolejce pakietów wychodzących. Wspierane przez Linuksa 2.4 i późniejsze wersje.
BŁĘDY¶
Przy wysyłaniu lub odbieraniu za pośrednictwem gniazd UDP mogą wystąpić wszystkie błędy zdefiniowane dla socket(7) lub ip(7).- ECONNREFUSED
- Z adresem docelowym nie był skojarzony żaden odbiorca. Może to być spowodowane przez uprzednie wysłanie pakietu za pośrednictwem danego gniazda.
WERSJE¶
IP_RECVERR pojawiło się w Linuksie 2.2.ZOBACZ TAKŻE¶
ip(7), raw(7), socket(7), udplite(7)O STRONIE¶
Angielska wersja tej strony pochodzi z wydania 3.40 projektu Linux man-pages. Opis projektu oraz informacje dotyczące zgłaszania błędów można znaleźć pod adresem http://www.kernel.org/doc/man-pages/.TŁUMACZENIE¶
Autorami polskiego tłumaczenia niniejszej strony podręcznika man są: Andrzej Krzysztofowicz (PTM) <ankry@mif.pg.gda.pl> i Robert Luberda <robert@debian.org>. Polskie tłumaczenie jest częścią projektu manpages-pl; uwagi, pomoc, zgłaszanie błędów na stronie http://sourceforge.net/projects/manpages-pl/. Jest zgodne z wersją 3.40 oryginału.2010-06-13 | Linux |