Provided by: manpages-pl_4.15.0-9_all bug

NAZWA

       udp - Protokół datagramów użytkownika dla IPv4

SKŁADNIA

       #include <sys/socket.h>
       #include <netinet/in.h>
       #include <netinet/udp.h>

       udp_socket = socket(AF_INET, SOCK_DGRAM, 0);

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.

       Podczas tworzenia gniazda UDP jego adresy: lokalny i  zdalny  są  nieokreślone.  Datagramy
       można  wysyłać  natychmiast  za  pomocą  sendto(2)  lub  sendmsg(2), podając jako argument
       prawidłowy adres docelowy. Gdy  dla  gniazda  jest  wywołane  connect(2),  ustawiany  jest
       domyślny  adres  docelowy  i od tego momentu można wysyłać datagramy za pomocą send(2) lub
       write(2), nie podając adresu docelowego. Nadal możliwe jest wysyłanie  do  innych  adresów
       docelowych,  przekazując adres do funkcji sendto(2) lub sendmsg(2).  Aby odbierać pakiety,
       gniazdo może  zostać  najpierw  przypisane  do  adresu  lokalnego  za  pomocą  bind(2).  W
       przeciwnym  przypadku,  warstwa  gniazd  automatycznie  przypisze wolny port lokalny spoza
       zakresu zdefiniowanego przez /proc/sys/net/ipv4/ip_local_port_range  i  przypisze  gniazdo
       do INADDR_ANY.

       Wszystkie  operacje  odbioru  zwracają  tylko  jeden  pakiet. Gdy pakiet jest mniejszy niż
       przekazany bufor, zwracane są tylko dane o rozmiarze pakietu; gdy pakiet jest większy  niż
       bufor,  pakiet  jest  obcinany  i  ustawiany jest znacznik MSG_TRUNC. MSG_WAITALL nie jest
       wspierane.

       Opcje IP mogą być wysyłane lub odbierane za pomocą opcji gniazda opisanych w ip(7). Są one
       przetwarzane  przez  jądro tylko wtedy, gdy włączony jest odpowiedni parametr w /proc (ale
       nadal są przekazywane do programu użytkownika, nawet gdy kontrolka jest wyłączona). Zobacz
       ip(7).

       Gdy  przy wysyłaniu ustawiony jest znacznik MSG_DONTROUTE, adres docelowy musi odnosić się
       do lokalnego adresu interfejsu i pakiet jest wysyłany jedynie do tego interfejsu.

       Domyślnie UDP pod Linuksem wykrywa MTU (Maximum Transmission Unit) ścieżki. Oznacza to, że
       jądro utrzymuje informacje o MTU określonego docelowego adresu IP i zwraca EMSGSIZE, jeśli
       pakiet UDP jest większy niż MTU. W takim  wypadku  aplikacja  powinna  zmniejszyć  rozmiar
       pakietu.  Wykrywanie  MTU  ścieżki można wyłączyć ustawiając opcję IP_MTU_DISCOVER gniazda
       lub używając pliku /proc/sys/net/ipv4/ip_no_pmtu_disc, szczegóły opisano  w  ip(7).  Jeśli
       jest  wyłączone,  UDP  podzieli wychodzące pakiety UDP, których rozmiar przekracza MTU, na
       mniejsze pakiety. Jednakże wyłączenie wykrywania MTU ścieżki nie jest  zalecane,  gdyż  ma
       negatywny wpływ na wydajność i niezawodność.

   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.

       Dla zgodności z kodem odziedziczonym w wersjach 2.0  i  2.2  jądra  Linuksa  było  możliwe
       ustawienie  opcji  SOL_SOCKET  SO_BSDCOMPAT,  aby otrzymywać błędy zdalne tylko wtedy, gdy
       gniazdo jest połączone (z wyjątkiem EPROTO i EMSGSIZE).  Błędy  wygenerowane  lokalnie  są
       zawsze  przekazywane.  Obsługa  tej  opcji  została  usunięta  w kolejnych wersjach jądra;
       szczegóły można znaleźć w socket(7).

       Gdy włączona jest opcja IP_RECVERR, wszystkie błędy  są  przechowywane  w  kolejce  błędów
       gniazda   i   mogą   być  odczytywane  za  pomocą  recvmsg(2)   z  ustawionym  znacznikiem
       MSG_ERRQUEUE.

   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. Jeśli nie zaznaczono inaczej, optval jest wskaźnikiem do int.

       Following  is  a  list  of  UDP-specific socket options.  For details of some other socket
       options that are also applicable for UDP sockets, see socket(7).

       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)
              Returns  the  number  of  data  bytes in the local send queue.  Supported only with
              Linux 2.4 and above.

       Ponadto wspierane są wszystkie kontrolki wejścia/wyjścia opisane w ip(7) i socket(7).

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)

       The kernel source file Documentation/networking/ip-sysctl.txt.

       RFC 768 dla protokołu datagramów użytkownika.
       RFC 1122 dla wymagań hostów.
       RFC 1191 dla opisu badania MTU ścieżki.

O STRONIE

       Angielska wersja tej strony  pochodzi  z  wydania  5.13  projektu  Linux  man-pages.  Opis
       projektu,  informacje  dotyczące  zgłaszania  błędów oraz najnowszą wersję oryginału można
       znaleźć pod adresem https://www.kernel.org/doc/man-pages/.

TŁUMACZENIE

       Autorami polskiego tłumaczenia niniejszej strony podręcznika  są:  Andrzej  Krzysztofowicz
       <ankry@green.mf.pg.gda.pl>,   Robert   Luberda   <robert@debian.org>   i   Michał   Kułach
       <michal.kulach@gmail.com>

       Niniejsze tłumaczenie jest wolną dokumentacją. Bliższe  informacje  o  warunkach  licencji
       można   uzyskać   zapoznając   się   z   GNU   General   Public   License   w   wersji   3
       ⟨https://www.gnu.org/licenses/gpl-3.0.html⟩  lub  nowszej.  Nie   przyjmuje   się   ŻADNEJ
       ODPOWIEDZIALNOŚCI.

       Błędy  w  tłumaczeniu  strony  podręcznika  prosimy  zgłaszać  na  adres listy dyskusyjnej
       ⟨manpages-pl-list@lists.sourceforge.net⟩.