Provided by:
manpages-pl_20060617-4_all 
NAZWA
udp - protokol datagramow uytkownika dla IPv4
SK/LADNIA
#include <sys/socket.h>
#include <netinet/in.h>
udp_socket = socket(PF_INET, SOCK_DGRAM, 0);
OPIS
Jest to implementacja opisanego w RFC 768 protokolu datagramow
uytkownika. Implementuje ona uslug bezpolczeniowych, niepewnych
pakietow datagramowych. Kolejno pakietow moe ulec zmianie przed ich
dotarciem do celu, mog one te zosta powielone. UDP generuje i sprawdza
sumy kontrolne, aby wykry bldy transmisji.
Podczas tworzenia gniazda UDP, jego adresy: lokalny i zdalny s
nieokrelone. Datagramy mona wysyla natychmiast za pomoc sendto(2) lub
sendmsg(2) podajc jako argument prawidlowy adres docelowy. Gdy dla
gniazda jest wywolane connect(2), ustawiany jest domylny adres docelowy
i od tego momentu mona wysyla datagramy za pomoc send(2) lub write(2)
nie podajc adresu docelowego. Nadal moliwe jest wysylanie do innych
adresow docelowych podajc adres funkcji sendto(2) lub sendmsg(2). Aby
odbiera pakiety, gniazdo moe zosta najpierw przypisane do adresu
lokalnego za pomoc bind(2). W przeciwnym przypadku, warstwa gniazd
automatycznie przypisze wolny port lokalny spoza zakresu zdefiniowanego
przez 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 wikszy ni bufor, pakiet jest obcinany i
ustawiany jest znacznik MSG_TRUNC. MSG_WAITALL nie jest wspierane.
Opcje IP mog by wysylane lub odbierane za pomoc opcji gniazda opisanych
w ip(7). S one przetwarzane przez jdro tylko wtedy, gdy wlczona jest
odpowiednia kontrolka systemowa (ale nadal s przekazywane do programu
uytkownika, nawet gdy kontrolka jest wylczona). Zobacz ip(7).
Gdy przy wysylaniu ustawiony jest znacznik MSG_DONTROUTE, adres
docelowy musi odnosi si do lokalnego adresu interfejsu i pakiet jest
wysylany jedynie do tego interfejsu.
UDP dzieli pakiet na fragmenty, gdy jego calkowity rozmiar przekracza
warto MTU (Maximum Transmission Unit) dla interfejsu. Bardziej
przyjazn dla sieci alternatyw jest korzystanie z badania MTU cieki, jak
opisano w rozdziale IP_PMTU_DISCOVER podrcznika ip(7).
FORMAT ADRESU
UDP stosuje format adresu IPv4 sockaddr_in opisany w ip(7).
OBS/LUGA B/LD'OW
Wszystkie bldy krytyczne s przekazywane do programu uytkownika jako
warto zwracana, nawet gdy gniazdo nie jest polczone. Dotyczy to take
bldow asynchronicznych otrzymywanych z sieci. Mona te otrzyma bld
dotyczcy pakietu wczeniej wyslanego z danego gniazda. To zachowanie
roni si od wielu innych implementacji gniazd BSD, ktore nie przekazuj
adnych bldow, gdy gniazdo nie jest polczone. Zachowanie Linuksa ma
oparcie w RFC 1122.
Dla zgodnoci z kodem odziedziczonym w wersjach 2.0 i 2.2 jdra Linuksa
bylo moliwe ustawienie opcji SOL_SOCKET SO_BSDCOMPAT, aby otrzymywa
bldy zdalne tylko wtedy, gdy gniazdo jest polczone (z wyjtkiem EPROTO i
EMSGSIZE). Bldy wygenerowane lokalnie s zawsze przekazywane. Obsluga
tej opcji zostala usunita w kolejnych wersjach jdra; szczegoly mona
znale w socket(7).
Gdy wlczona jest opcja IP_RECVERR, wszystkie bldy s przechowywane w
kolejce bldow gniazda i mog by odczytywane za pomoc recvmsg(2) z
ustawionym znacznikiem MSG_ERRQUEUE.
OPCJE GNIAZD
Aby ustawi lub pobra opcj gniazda UDP, naley wywola getsockopt(2) w
celu odczytania lub setsockopt(2) w celu zapisania opcji, ustawiajc
argument poziomu opcji na IPPROTO_UDP.
UDP_CORK (od Linuksa 2.5.44)
Jeli ta opcja zostanie wlczona, to wszystkie dane na wyjciu tego
gniazda s lczone do pojedynczego datagramu, ktory zostanie
wyslany, kiedy ta opcja zostanie wylczona. Opcja ta nie powinna
by uywana w kodzie, ktory w zamierzeniu ma by przenony.
IOCTL
Do poniszych kontrolek wejcia/wyjcia mona uzyska dostp za pomoc funkcji
ioctl(2). Prawidlowa skladnia to:
int value;
error = ioctl(udp_socket, ioctl_type, &value);
FIONREAD (SIOCINQ)
Pobiera wskanik do argumentu calkowitego. Zwraca rozmiar
nastpnego oczekujcego datagramu w podanej liczbie bajtow lub 0,
gdy nie czeka aden pakiet.
TIOCOUTQ (SIOCOUTQ)
Zwraca liczb bajtow danych w lokalnej kolejce pakietow
wychodzcych. Wspierane przez Linuksa 2.4 i poniejsze wersje.
Ponadto wspierane s wszystkie kontrolki wejcia/wyjcia opisane w ip(7) i
socket(7).
B/LDY
Przy wysylaniu lub odbieraniu za porednictwem gniazd UDP mog wystpi
wszystkie bldy zdefiniowane dla socket(7) lub ip(7).
ECONNREFUSED Z adresem docelowym nie byl skojarzony aden odbiorca. Moe
to by spowodowane przez uprzednie wyslanie pakietu za porednictwem
danego gniazda.
WERSJE
IP_RECVERR pojawilo si w Linuksie 2.2.
PODZIKOWANIA
T strone podrcznika napisal Andi Kleen.
ZOBACZ TAKE
ip(7), raw(7), socket(7)
RFC 768 dla protokolu datagramow uytkownika.
RFC 1122 dla wymaga hostow.
RFC 1191 dla opisu badania MTU cieki.
INFORMACJE O T/LUMACZENIU
Powysze tlumaczenie pochodzi z nieistniejcego ju Projektu Tlumaczenia
Manuali i moe nie by aktualne. W razie zauwaenia ronic midzy powyszym
opisem a rzeczywistym zachowaniem opisywanego programu lub funkcji,
prosimy o zapoznanie si z oryginaln (angielsk) wersj strony podrcznika.