oracular (7) ip.7.gz

Provided by: manpages-pl_4.23.1-1_all bug

NAZWA

       ip - Implementacja protokołu IPv4 dla systemu Linux

SKŁADNIA

       #include <sys/socket.h>
       #include <netinet/in.h>
       #include <netinet/ip.h> /* nadzbiór poprzedniego */

       tcp_socket = socket(AF_INET, SOCK_STREAM, 0);
       udp_socket = socket(AF_INET, SOCK_DGRAM, 0);
       raw_socket = socket(AF_INET, SOCK_RAW, protocol);

OPIS

       Linux  implementuje  protokół  IPv4  opisany  w RFC 791 i RFC 1122. ip zawiera drugi poziom implementacji
       adresowania grupowego (multicasting) zgodny z RFC 1112. Zawiera też  router  IP,  włączając  w  to  filtr
       pakietów.

       Interfejs  programistyczny  jest zgodny z gniazdami BSD. Więcej informacji na temat gniazd można znaleźć,
       przeglądając socket(7).

       Gniazdo IP jest tworzone za pomocą socket(2):

           socket(AF_INET, typ_gniazda, protokół);

       Prawidłowe typy gniazd obejmują SOCK_STREAM do otwarcia gniazda strumieniowego,  SOCK_DGRAM  do  otwarcia
       gniazda  datagramowego  i  SOCK_RAW do otwarcia gniazda raw(7) w celu bezpośredniego dostępu do protokołu
       IP.

       protocol jest protokołem IP w nagłówku IP, który  ma  być  otrzymany  lub  wysłany.  Prawidłowe  wartości
       protocol to:

       •  0 i IPPROTO_TCP dla gniazd strumieniowych tcp(7);

       •  0 i IPPROTO_UDP dla gniazd datagramowych udp(7);

       •  IPPROTO_SCTP dla gniazd strumieniowych sctp(7); oraz

       •  IPPROTO_UDPLITE dla gniazd datagramowych udplite(7).

       W przypadku SOCK_RAW można podać prawidłowe liczby przypisane w RFC 1700 protokołowi IP IANA.

       Kiedy proces chce odbierać nowe, nadchodzące pakiety lub połączenia, powinien podłączyć gniazdo do adresu
       lokalnego interfejsu za pomocą funkcji bind(2). W takim przypadku do dowolnej lokalnej pary (adres, port)
       można  podłączyć  tylko  jedno  gniazdo  IP.  Gdy  w wywołaniu bind(2) podana jest wartość INADDR_ANY, to
       gniazdo zostanie dowiązane do wszystkich lokalnych interfejsów sieciowych. Gdy do niedowiązanego  gniazda
       wywoływane jest listen(2), to gniazdo zostanie automatycznie dowiązane do losowo wybranego wolnego portu,
       przy czym adres lokalny zostanie  ustawiony  na  INADDR_ANY.  Gdy  dla  niedowiązanego  gniazda  zostanie
       wywołane connect(2), gniazdo to zostanie automatycznie dowiązane do losowo wybranego wolnego portu lub do
       używalnego portu dzielonego, przy czym adres lokalny zostanie ustawiony na INADDR_ANY.

       Przypisywanie (często w literaturze: "nazywanie") lokalnego gniazda  TCP  jest  niemożliwe  przez  pewien
       okres czasu po jego zamknięciu, chyba że zostanie dla tego gniazda ustawiony atrybut SO_REUSEADDR. Należy
       używać tego atrybutu z rozwagą, gdyż czyni on TCP mniej niezawodnym.

   Format adresu
       Adres gniazda IP jest przedstawiony za pomocą kombinacji adresu interfejsu IP i 16-bitowego numeru portu.
       Podstawowy protokół IP nie zawiera numerów portów, są one zaimplementowane w protokołach wyższej warstwy,
       takich jak udp(7) i tcp(7). Dla gniazd surowych sin_port jest ustawione na protokół IP.

           struct sockaddr_in {
               sa_family_t    sin_family; /* rodzina adresów: AF_INET */
               in_port_t      sin_port;   /* port - sieciowa kolejność bajtów */
               struct in_addr sin_addr;   /* adres internetowy */
           };

           /* adres internetowy */
           struct in_addr {
               uint32_t       s_addr;     /* adres - sieciowa kolejność bajtów */
           };

       sin_family ma zawsze wartość AF_INET. Jest to wymagane;  w  Linuksie  2.2  większość  funkcji  sieciowych
       zwraca  EINVAL, jeśli brakuje tego ustawienia. sin_port zawiera numer portu podany w sieciowej kolejności
       bajtów. Numery portów  niższe  niż  1024  są  nazywane  portami  uprzywilejowanymi  (lub  czasem  portami
       zarezerwowanymi). Tylko procesy uprzywilejowane (na Linuksie: proces z przywilejem CAP_NET_BIND_SERVICE w
       przestrzeni nazw użytkownika zarządzającą swoją sieciową przestrzenią nazw) mogą wywołać bind(2) dla tego
       rodzaju  gniazd.  Należy  zauważyć,  że  surowy  protokół IPv4 jako taki nie zawiera pojęcia portu (takie
       rozróżnienie jest dopiero w warstwie transportowej, a to jest warstwa sieciowa). Numery portów  występują
       dopiero w protokołach wyższej warstwy, takich jak tcp(7) i udp(7).

       sin_addr  to  adres IP komputera (maszyny). Pole s_addr struktury struct in_addr zawiera adres interfejsu
       maszyny w sieciowej kolejności bajtów. Polu in_addr należy albo przypisać jedną z wartości INADDR_*  (np.
       INADDR_LOOPBACK)  za  pomocą  htonl(3),  albo  użyć  funkcji  bibliotecznych  inet_aton(3), inet_addr(3),
       inet_makeaddr(3) do ustawienia wartości, albo ustawić bezpośrednio przez funkcję obsługi nazw (patrz  też
       gethostbyname(3)).

       Adresy  IPv4  dzielimy  na pojedyncze (unicast), rozgłoszeniowe (broadcast) i grupowe (multicast). Adresy
       pojedyncze określają pojedynczy interfejs maszyny, adresy rozgłoszeniowe określają  wszystkie  maszyny  w
       obrębie  jakiejś  sieci (podsieci), a adresy grupowe wszystkie maszyny w obrębie jakiejś grupy odbiorców.
       Datagramy kierowane do adresów rozgłoszeniowych trafiają do odbiorcy tylko wtedy,  gdy  jego  gniazdo  ma
       ustawiony  atrybut  rozgłoszenia  SO_BROADCAST.  Ten  sam  atrybut  musi  być też ustawiony, gdy zachodzi
       potrzeba wysłania datagramów rozgłoszenia. W  obecnej  implementacji  gniazda  połączeniowe  mogą  używać
       wyłącznie adresów pojedynczych.

       Należy  zauważyć,  że  dla  adresu i portu zawsze jest używana sieciowa kolejność bajtów. W szczególności
       oznacza to, że trzeba używać funkcji  htons(3)  dla  numeru  przypisanego  do  portu.  Wszystkie  funkcje
       standardowej  biblioteki  manipulujące  adresem/portem automatycznie przekształcają podaną wartość na jej
       sieciową reprezentację.

   Adresy specjalne i zarezerwowane
       Istnieje wiele adresów specjalnych:

       INADDR_LOOPBACK (127.0.0.1)
              zawsze odnosi się do komputera lokalnego za pośrednictwem urządzenia pętli zwrotnej (loopback);

       INADDR_ANY (0.0.0.0)
              oznacza każdy adres, do kojarzenia gniazd;

       INADDR_BROADCAST (255.255.255.255)
              ma w przypadku bind(2),  ze  względów  historycznych,  taki  sam  skutek  jak  INADDR_ANY.  Pakiet
              zaadresowany  do  INADDR_BROADCAST  za  pośrednictwem  gniazda  z  ustawionym  SO_BROADCAST będzie
              rozgłaszał do wszystkich stacji w segmencie sieci lokalnej, tak długo, jak połączenie ma możliwość
              rozgłaszania.

       Najwyższe numery adresów
       Najniższe numery adresów
              W  każdej  podsieci  lokalnej, innej niż punkt do punktu, z połączeniem obsługującym rozgłaszanie,
              adres o najwyższym możliwym numerze (np. adres .255 w podsieci  z  maską  sieciową  255.255.255.0)
              służy  jako adres rozgłoszeniowy. Nie można go użytecznie przypisać do indywidualnego interfejsu i
              można go zaadresować jedynie  gniazdem  z  ustawioną  opcją  SO_BROADCAST.  Standardy  internetowe
              historycznie  rezerwowały  również  adres o najniższym możliwym numerze (np. adres .0 w podsieci z
              maską sieciową 255.255.255.0) do rozgłaszania, choć  nazywały  go  „przestarzałym”  do  tego  celu
              (część  źródeł  odnosi  się  do  niego  również  jako  do „adresu sieci”). Od Linuksa 5.14 jest on
              traktowany jako standardowy adres pojedynczy i może być przypisany do interfejsu.

       Standardy internetowe tradycyjnie rezerwowały również różne  adresy  do  określonych  celów,  choć  Linux
       części z nich nie traktuje już w specjalny sposób.

       [0.0.0.1, 0.255.255.255]
       [240.0.0.0, 255.255.255.254]
              Adresy  w tych zakresach (0/8 i 240/4) są zarezerwowane globalnie. Od Linuksa 5.3 i Linuksa 2.6.25
              adresy, odpowiednio, 0/8 i 240/4, inne niż INADDR_ANY i INADDR_BROADCAST są traktowane jako zwykłe
              adresy  pojedyncze.  Systemy przestrzegające tradycyjnego zachowania mogą nie współpracować z tymi
              zakresami historycznie zarezerwowanych adresów.

       [127.0.0.1, 127.255.255.254]
              Adresy w tym zakresie (127/8) są traktowane jako adresy pętli zwrotnej, podobnie do  standardowego
              adresu pętli zwrotnej INADDR_LOOPBACK (127.0.0.1);

       [224.0.0.0, 239.255.255.255]
              Adresy w tym zakresie (224/4) są przeznaczone do użycia grupowego (multicast).

   Opcje gniazda
       IP wspiera niektóre opcje specyficzne dla protokołu, które mogą być ustawione przy użyciu setsockopt(2) i
       odczytane z pomocą getsockopt(2). Poziom opcji gniazda dla IP to IPPROTO_IP. Dla  każdego  ze  znaczników
       logicznych wartość całkowita zero oznacza fałsz, a każda inna - prawdę.

       Gdy poda się nieprawidłową opcję gniazda, getsockopt(2) i setsockopt(2) zwrócą błąd ENOPROTOOPT.

       IP_ADD_MEMBERSHIP (od Linuksa 1.2)
              Przyłącza grupę adresów. Argumentem jest struktura ip_mreqn .

                  struct ip_mreqn {
                      struct in_addr imr_multiaddr; /* grupowy adres IP */
                      struct in_addr imr_address;   /* adres IP interfejsu
                                                       lokalnego */
                      int            imr_ifindex;   /* indeks interfejsu */
                  };

              imr_multiaddr  zawiera  adres  grupy,  którą  aplikacja  chce podłączyć lub rozłączyć. Musi być to
              poprawny adres grupowy  (multicast;  w  przeciwnym  wypadku  setsockopt(2)  zwróci  błąd  EINVAL).
              imr_address  jest to adres lokalnego interfejsu, przez który system powinien połączyć grupę; jeśli
              jest równy INADDR_ANY, to odpowiedni interfejs  jest  wybierany  przez  system.  imr_ifindex  jest
              indeksem interfejsu, który powinien być podłączony/odłączony do obsługi grupy imr_multiaddr lub 0,
              by wskazać na dowolny interfejs.

              Struktura ip_mreqn jest dostępna tylko od wersji 2.2 Linuksa. Dla kompatybilności, stara struktura
              ip_mreq  wciąż  jest  obsługiwana. Różni się wprawdzie od ip_mreqn, lecz tylko tym, że nie zawiera
              pola imr_ifindex (jądro określa którą strukturę  zastosowano  na  podstawie  rozmiaru  podanego  w
              optlen).

              IP_ADD_MEMBERSHIP jest prawidłowe wyłącznie dla setsockopt(2).

       IP_ADD_SOURCE_MEMBERSHIP (od Linuksa 2.4.22 / Linuksa 2.5.68)
              Przyłącza  adres  grupowy  (multicast) i zezwala na otrzymywanie danych jedynie z podanego źródła.
              Argumentem jest struktura ip_mreq_source.

                  struct ip_mreq_source {
                      struct in_addr imr_multiaddr;  /* grupowy adres IP */
                      struct in_addr imr_interface;  /* adres IP interfejsu
                                                        lokalnego */
                      struct in_addr imr_sourceaddr; /* adres IP
                                                        grupowego źródła */
                  };

              Struktura ip_mreq_source jest podobna do ip_mreqn  opisanej  pod  hasłem  IP_ADD_MEMBERSHIP.  Pole
              imr_multiaddr  zawiera  adres grupowy do którego aplikacja ma zamiar dołączyć lub opuścić go. Pole
              imr_interface jest adresem interfejsu lokalnego z  którego  system  powinien  dołączyć  do  adresu
              grupowego.  Pole  imr_sourceaddr  zawiera adres źródłowy, z którego aplikacja ma zamiar otrzymywać
              dane.

              Opcja może być użyta kilkakrotnie aby otrzymywać dane z kilku źródeł.

       IP_BIND_ADDRESS_NO_PORT (od Linuksa 4.2)
              Informuje jądro, aby nie rezerwować portu efemerycznego przy korzystaniu z bind(2) z numerem portu
              0.  Port  będzie  wybrany  automatycznie  później,  w  trakcie  wykonywania  connect(2),  w sposób
              umożliwiający współdzielenie portu źródłowego tak długo, jak długo unikatowa jest czteroelementowa
              krotka.

       IP_BLOCK_SOURCE (od Linuksa 2.4.22 / 2.5.68)
              Kończy  otrzymywanie  danych  grupowych  z  podanego  źródła  i podanej grupy. Jest to odpowiednie
              jedynie   po   zapisaniu   się   do   adresu   grupowego   za   pomocą    IP_ADD_MEMBERSHIP    lub
              IP_ADD_SOURCE_MEMBERSHIP.

              Argumentem jest struktura ip_mreq_source opisana w części dotyczącej IP_ADD_SOURCE_MEMBERSHIP.

       IP_DROP_MEMBERSHIP (od Linuksa 1.2)
              Odłącza  się  od  grupy  adresów.  Argumentem  jest  struktura  ip_mreqn  lub  ip_mreq  podobna do
              IP_ADD_MEMBERSHIP.

       IP_DROP_SOURCE_MEMBERSHIP (od Linuksa 2.4.22 / 2.5.68)
              Odłącza się od grupy z podanego źródła — zaprzestaje otrzymywania danych z podanej  grupy  adresów
              pochodzącej  z  podanego  źródła.  Jeśli  programy  zostały przypisane do wielu źródeł z tej samej
              grupy, dane z pozostałych źródeł wciąż będą dostarczane.  Aby  zatrzymać  otrzymywanie  danych  ze
              wszystkich źródeł na raz, należy użyć IP_DROP_MEMBERSHIP.

              Argumentem jest struktura ip_mreq_source opisana w części dotyczącej IP_ADD_SOURCE_MEMBERSHIP.

       IP_FREEBIND (od Linuksa 2.4)
              Jeśli  jest  włączona,  to  ta  opcja  logiczna  pozwala na przypisanie do adresu nielokalnego lub
              (jeszcze) nieistniejącego. Pozwala to na nasłuchiwanie na gnieździe bez wymagania, żeby  interfejs
              sieciowy  niższej  warstwy lub podany dynamiczny adres IP były ustawione podczas próby przypisania
              gniazda przez aplikację. Ta opcja jest odpowiednikiem  -  dla  pojedynczego  gniazda  -  opisanego
              poniżej interfejsu /proc ip_nonlocal_bind.

       IP_HDRINCL (od Linuksa 2.0)
              Jeśli włączone, to dopuszczalne jest tworzenie przez użytkownika własnego nagłówka IP przed danymi
              użytkownika. Działa to jedynie dla gniazd SOCK_RAW, patrz raw(7), by  uzyskać  więcej  informacji.
              Gdy  ten  znacznik  jest  włączony,  to  wartości  ustawiane  przez IP_OPTIONS, IP_TTL i IP_TOS są
              ignorowane.

       IP_LOCAL_PORT_RANGE (od Linuksa 6.3)
              Ustawia lub pobiera domyślny przedział lokalnych portów przypisany do  gniazda.  Opcji  tej  można
              użyć  do  zawężenia  dla  danego gniazda, globalnego przedziału lokalnych portów, zdefiniowanego w
              interfejsie /proc ip_local_port_range opisanym poniżej.

              Opcja przyjmuje wartość  uint32_t,  gdzie  wysokie  16  bitów  ustawia  górną  granicę  przedziału
              (włącznie),  a  niskie  16  bitów  ustawia dolną granicę przedziału (włącznie). Wartości 16-bitowe
              powinny przestrzegać kolejności bajtów komputera.

              Dolna granica przedziału musi być mniejsza od górnej granicy przedziału, a żadna nie może  wynosić
              zero. Przy naruszeniu tych warunków, ustawienie opcji zawiedzie z błędem EINVAL.

              Jeśli  któraś  z  granic  jest  poza  globalnym  przedziałem  portów lokalnych lub wynosi zero, to
              przedział nie ma zastosowania.

              Aby zresetować ustawienie, należy podać zero jako zarówno górną jak i dolną granicę przedziału.

       IP_MSFILTER (od Linuksa 2.4.22 / 2.5.68)
              Opcja pozwala na  uzyskanie  dostępu  do  zaawansowanego  interfejsu  filtrowania  pełnostanowego.
              Argumentem jest struktura ip_msfilter.

                  struct ip_msfilter {
                      struct in_addr imsf_multiaddr; /* grupowy adres IP
                      struct in_addr imsf_interface; /* adres IP interfejsu
                                                        lokalnego */
                      uint32_t       imsf_fmode;     /* Tryb filtrowania */

                      uint32_t       imsf_numsrc;    /* Liczba źródeł
                                                        w poniższej tablicy */
                      struct in_addr imsf_slist[1];  /* Tablica źródeł
                                                        adresów */
                  };

              Do   określenia  trybu  filtrowania  służą  dwa  makra  -  MCAST_INCLUDE  i  MCAST_EXCLUDE.  Makro
              IP_MSFILTER_SIZE(n) służy natomiast do określenia wielkości  pamięci  potrzebnej  do  przechowania
              struktury ip_msfilter z n źródeł w liście źródeł.

              Pełny opis filtrowania źródeł adresów zawiera dokument RFC 3376.

       IP_MTU (od Linuksa 2.2)
              Pobiera bieżącą wartość MTU ścieżki obecnego gniazda. Zwraca liczbę całkowitą.

              IP_MTU  jest  poprawne  tylko  do  getsockopt(2)  i  można  go  użyć wyłącznie gdy gniazdo zostało
              połączone.

       IP_MTU_DISCOVER (od Linuksa 2.2)
              Ustawia lub pobiera opcję badania MTU ścieżki (ang. Path MTU Discovery) dla gniazda. Gdy opcja  ta
              jest  włączona, to Linux będzie przeprowadzał badanie MTU ścieżki dla gniazd SOCK_STREAM zgodnie z
              definicją  zawartą  w  RFC 1191.  W  przypadku  gniazd   nie   będących   gniazdami   SOCK_STREAM,
              IP_PMTUDISC_DO   wymusza   ustawienie   we  wszystkich  pakietach  wychodzących  znacznika  zakazu
              fragmentacji. Za  poprawne  zgodne  z  wartością  MTU,  podzielenie  na  pakiety  i  za  wykonanie
              ewentualnych  retransmisji  jest  odpowiedzialny  program  użytkownika.   Jądro  odrzuci (z błędem
              EMSGSIZE) pakiety większe niż znane MTU ścieżki. Ustawienie znacznika  IP_PMTUDISC_WANT  spowoduje
              sfragmentowanie datagramu, jeśli MTU ścieżki tego wymaga, albo - w przeciwnym wypadku - ustawienie
              znacznika zakazującego fragmentacji.

              Domyślną dla systemu wartość można ustawić na  IP_PMTUDISC_WANT lub na IP_PMTUDISC_DONT,  wpisując
              odpowiednio - zero lub wartość niezerową - do pliku /proc/sys/net/ipv4/ip_no_pmtu_disc.

              Wart. badan. MTU ścieżki   Znaczenie
              IP_PMTUDISC_WANT           Używaj ustawień zależnych od trasy.
              IP_PMTUDISC_DONT           Nie badaj MTU ścieżki.
              IP_PMTUDISC_DO             Zawsze badaj MTU ścieżki.
              IP_PMTUDISC_PROBE          Ustawia bit DF, ale ignoruje MTU ścieżki.

              Gdy  włączone  jest  badanie  MTU  ścieżki,  jądro automatycznie namierza wartości MTU ścieżki dla
              każdego komputera docelowego. Gdy aktywne jest  połączenie  z  danym  komputerem,  można  wygodnie
              odczytać  aktualnie  rozpoznaną  wartość  MTU  ścieżki za pomocą connect(2) używając opcji gniazda
              IP_MTU (np. po wystąpieniu błędu EMSGSIZE). Wartość MTU ścieżki może się zmieniać  z  czasem.  Dla
              gniazd  bezpołączeniowych  z  wieloma  komputerami  docelowymi  MTU  dla  danego,  również nowego,
              komputera docelowego można uzyskać za pomocą kolejki  błędów  (zobacz  IP_RECVERR).  Po  nadejściu
              każdej aktualizacji MTU zostanie skolejkowany nowy błąd.

              W  trakcie  rozpoznawania  MTU,  pakiety  inicjujące z gniazd datagramowych mogą zostać porzucone.
              Programy korzystające z UDP powinny być tego świadome i nie brać tego pod uwagę w swojej strategii
              retransmisji pakietów.

              Aby  zainicjować  proces  badania  MTU  ścieżki dla gniazd niepołączonych, można rozpocząć z dużym
              rozmiarem datagramu (nagłówek o długości do 64 kilobajtów)  i  pozwolić  na  jego  zmniejszenie  w
              wyniku aktualizacji MTU ścieżki.

              Aby  oszacować inicjalne MTU ścieżki, należy podłączyć gniazdo datagramowe do adresu docelowego za
              pomocą connect(2) i pobrać MTU, wołając getsockopt(2) z opcją IP_MTU.

              Poprzez ustawienie wartości  w  IP_PMTUDISC_PROBE  (dostępnej  od  Linuksa  2.6.22)  możliwe  jest
              zaimplementowanie  opisanego  w RFC 4821 próbkowania MTU dla gniazd  SOCK_DGRAM lub SOCK_RAW. Jest
              to  szczególnie  użyteczne  w  narzędziach  diagnostycznych  typu  tracepath(8),  które  w  sposób
              zamierzony chcą wysyłać pakiety testowe większe niż zaobserwowane MTU ścieżki.

       IP_MULTICAST_ALL (od Linuksa 2.6.31)
              Tej opcji można użyć do modyfikacji zasad dostarczania wiadomości grupowych. Argument wynosi 0 lub
              1 (domyślnie 1). Gdy jest ustawiony na 1, to gniazdo otrzyma wiadomości ze wszystkich grup,  które
              dołączono  globalnie z całego systemu. W przeciwnym razie dostarczone będą tylko wiadomości z grup
              dołączonych jawnie (np. opcją IP_ADD_MEMBERSHIP) do tego konkretnego gniazda.

       IP_MULTICAST_IF (od Linuksa 1.2)
              Ustawia lokalne urządzenie dla gniazda grupowego. Argumentem do setsockopt(2)  jest  ip_mreqn  lub
              (od  Linuksa  3.5)  ip_mreq, struktura podobna do IP_ADD_MEMBERSHIP; albo struktura in_addr (jądro
              określa którą strukturę się podało na podstawie rozmiaru przekazanego w optlen). Do  getsockopt(2)
              argumentem jest struktura in_addr.

       IP_MULTICAST_LOOP (od Linuksa 1.2)
              Ustawia  lub  pobiera  logiczny  argument  typu  całkowitego,  określający, czy przesyłane pakiety
              grupowe powinny wracać do lokalnego gniazda.

       IP_MULTICAST_TTL (od Linuksa 1.2)
              Ustawia lub pobiera  wartość  czasu  życia  pakietu  dla  wychodzących  z  tego  gniazda  pakietów
              grupowych.  Jest  bardzo istotne w przypadku adresowania grupowego, by ustawić najmniejszą możliwą
              wartość TTL. Domyślnie jest to 1, co oznacza, że pakiety grupowe nie  opuszczają  sieci  lokalnej,
              chyba że program użytkownika wyraźnie tego żąda. Argument jest liczbą całkowitą.

       IP_NODEFRAG (od Linuksa 2.6.36)
              Jeśli  włączone  (argument jest niezerowy), łączenie pakietów wychodzących przez warstwę netfilter
              jest wyłączone. Argumentem jest liczba całkowita.

              Ta opcja jest prawidłowa tylko dla gniazd SOCK_RAW.

       IP_OPTIONS (od Linuksa 2.0)
              Ustawia lub pobiera opcje IP, które będą wysyłane z każdym pakietem z danego gniazda. Argumenty są
              wskaźnikiem  do  bufora pamięci zawierającego opcje i ich długości. setsockopt(2) ustawia opcje IP
              skojarzone z gniazdem. Maksymalny rozmiar opcji dla IPv4 to 40 bajtów. Zobacz RFC 791,  by  poznać
              możliwe  opcje.  Gdy  pakiet wstępnego potwierdzenia połączenia (ACK) dla gniazda typu SOCK_STREAM
              zawiera opcje IP, to opcje wychodzącego pakietu IP będą automatycznie pobrane z opcji IP pobranego
              pakietu  z  odwróconymi  nagłówkami  mówiącymi  o  trasie. Po ustanowieniu połączenia przychodzące
              pakiety nie są uprawnione do zmiany swoich opcji. Przetwarzanie  wszystkich  przychodzących  opcji
              źródła jest domyślnie wyłączone, ale można je włączyć ustawiając accept_source_route w interfejsie
              /proc. W przypadku gniazd datagramowych opcje IP mogą  być  ustawione  jedynie  przez  użytkownika
              lokalnego.  Funkcja  getsockopt(2)  z  argumentem  IP_OPTIONS  zwróci  obecnie wysłane opcje przez
              umieszczenie ich w dostarczonym buforze.

       IP_PASSSEC (od Linuksa 2.6.17)
              Jeśli na stacjach wysyłających i przyjmujących skonfigurowano  etykietowany  IPSEC  lub  NetLabel,
              opcja  ta  włącza  kontekst  bezpieczeństwa  drugiego  gniazda,  w  komunikacie  pomocniczym  typu
              SCM_SECURITY, odbieranym za pomocą recvmsg(2). Opcja  jest  wspierana  tylko  dla  gniazd  UDP;  w
              przypadku gniazd TCP lub SCTP proszę przeczytać opis opcji SO_PEERSEC poniżej.

              Podana  wartość  jest  argumentem do setsockopt(2), a zwracana jako wynik getsockopt(2) jest flaga
              logiczna będąca liczbą całkowitą.

              Kontekst bezpieczeństwa zwrócony przez komunikat pomocniczy SCM_SECURITY ma ten  sam  format,  jak
              opisany przy opcji SO_PEERSEC poniżej.

              Uwaga:   ponowne   użycie   typu   komunikatu  SCM_SECURITY  dla  opcji  gniazda  IP_PASSSEC  było
              prawdopodobnie pomyłką, jako że pozostałe komunikaty kontrolne IP mają swój  schemat  numeracji  w
              przestrzeni  nazw  IP  i  często  używają wartości opcji gniazda jako typu komunikatu. Obecnie nie
              występuje konflikt, ponieważ opcją IP z taką samą wartością jak SCM_SECURITY  jest  IP_HDRINCL,  a
              ona nigdy nie jest używana do typu komunikatów kontrolnych.

       IP_PKTINFO (od Linuksa 2.2)
              Przekazuje  pomocniczy  komunikat  IP_PKTINFO  zawierający  strukturę pktinfo dostarczającą trochę
              informacji o przychodzącym pakiecie. Działa to jedynie dla  gniazd  datagramowych.  Argument  jest
              znacznikiem  mówiącym  gniazdu,  czy  należy  przekazać  komunikat  IP_PKTINFO,  czy  też nie. Sam
              komunikat może zostać przesłany/otrzymany wraz z pakietem  jedynie  jako  komunikat  sterujący  za
              pomocą recvmsg(2) lub sendmsg(2).

                  struct in_pktinfo {
                      unsigned int   ipi_ifindex;  /* Indeks interfejsu */
                      struct in_addr ipi_spec_dst; /* Adres lokalny */
                      struct in_addr ipi_addr;     /* Nagłówek adresu
                                                      docelowego */
                  };

              ipi_ifindex  jest  unikatowym  indeksem  interfejsu,  przez  który  pakiet  został odebrany. Adres
              ipi_spec_dst jest lokalnym adresem pakietu,  a  ipi_addr  jest  adresem  docelowym  wynikającym  z
              nagłówka  pakietu.  Jeśli  IP_PKTINFO  jest  przekazane  do  sendmsg(2), a ipi_spec_dst ma wartość
              niezerową, to zostanie użyte jako źródłowy adres lokalny podczas przeszukiwania tablicy trasowania
              i  dla ustawienia opcji trasowania według adresu źródłowego. Gdy ipi_ifindex ma wartość niezerową,
              to podstawowy adres lokalny  interfejsu  wskazywanego  przez  ten  indeks  nadpisuje  ipi_spec_dst
              podczas przeszukiwania tablicy trasowania.

              Nieobsługiwane w przypadku gniazd SOCK_STREAM.

       IP_RECVERR (od Linuksa 2.2)
              Włącza  przekazywanie  dodatkowych komunikatów o błędach, zwiększając niezawodność połączenia. Gdy
              jest to ustawione w gnieździe datagramowym, to  wszystkie  generowane  błędy  będą  zapamiętane  w
              specjalnej kolejce błędów przypisanej do gniazda. Gdy użytkownik (proces użytkownika) otrzyma błąd
              (przez zwrócony kod błędu operacji na gnieździe), to może go odebrać, używając funkcji  recvmsg(2)
              z  ustawionym  znacznikiem  MSG_ERRQUEUE.  Struktura  opisująca  błąd  sock_extended_err  zostanie
              przekazana w pomocniczym komunikacie o typie IP_RECVERR i poziomie IPPROTO_IP. Jest  to  niezwykle
              pomocne  przy niezawodnym przechwytywaniu błędów niepołączonych gniazd. Odbierana z kolejki błędów
              porcja danych zawiera pakiet z informacją o błędzie.

              Komunikat sterujący IP_RECVERR zawiera strukturę sock_extended_err zdefiniowaną następująco:

                  #define SO_EE_ORIGIN_NONE    0
                  #define SO_EE_ORIGIN_LOCAL   1
                  #define SO_EE_ORIGIN_ICMP    2
                  #define SO_EE_ORIGIN_ICMP6   3

                  struct sock_extended_err {
                      uint32_t ee_errno;   /* numer błędu */
                      uint8_t  ee_origin;  /* źródło błędu */
                      uint8_t  ee_type;    /* typ */
                      uint8_t  ee_code;    /* kod */
                      uint8_t  ee_pad;
                      uint32_t ee_info;    /* informacje dodatkowe */
                      uint32_t ee_data;    /* inne dane */
                      /* Dalej mogą wystąpić dodatkowe dane */
                  };

                  struct sockaddr *SO_EE_OFFENDER(struct sock_extended_err *);

              ee_errno zawiera numer errno błędu  kolejki.  ee_origin  jest  kodem  miejsca  pochodzenia  błędu.
              Pozostałe  pola  są  zależne  od protokołu. Makro SO_EE_OFFENDER zwraca wskaźnik do adresu obiektu
              sieciowego, z którego pochodził błąd o zadanym wskaźniku do komunikatu pomocniczego. Gdy ten adres
              nie  jest  znany, pole sa_family struktury sockaddr zawiera wartość AF_UNSPEC a pozostałe pola tej
              struktury sockaddr są niezdefiniowane.

              IP  używa   struktury   sock_extended_err   w   następujący   sposób:   ee_origin   ustawione   na
              SO_EE_ORIGIN_ICMP  dla  błędów odbieranych jako pakiet ICMP albo też SO_EE_ORIGIN_LOCAL dla błędów
              generowanych lokalnie. Nieznane wartości należy ignorować. ee_type i ee_code są ustawiane  zgodnie
              z  typem  i kodem pól w nagłówku ICMP. ee_info zawiera rozpoznaną wartość MTU dla błędów EMSGSIZE.
              Komunikat zawiera również sockaddr_in węzła, który spowodował błąd, a  do  którego  można  uzyskać
              dostęp za pomocą makra SO_EE_OFFENDER. Pole sin_family adresu SO_EE_OFFENDER ma wartość AF_UNSPEC,
              gdy źródło błędu nie jest znane. Gdy błąd pochodzi z sieci, wszystkie opcje IP (IP_OPTIONS, IP_TTL
              itd.)  włączone  w gnieździe i zawarte w pakiecie błędu są przekazywane jako komunikaty kontrolne.
              Właściwe dane pakietu, który spowodował błąd są zwracane jako normalne dane. Należy  zauważyć,  że
              TCP nie ma kolejki błędów; MSG_ERRQUEUE jest nielegalne w przypadku gniazd SOCK_STREAM. IP_RECVERR
              jest poprawne dla TCP, ale wszystkie błędy są przekazywane przez  zwracaną  wartość  funkcji  albo
              przez SO_ERROR.

              Dla   gniazd  surowych,  IP_RECVERR  włącza  przepuszczanie  do  aplikacji  wszystkich  odebranych
              komunikatów  ICMP  o  błędach.  W  przeciwnym  przypadku  błędy  są  zgłaszane  tylko  dla  gniazd
              połączonych.

              Ustawia  lub  pobiera  znacznik  logiczny  zapisany  za  pomocą liczby całkowitej. IP_RECVERR jest
              domyślnie wyłączone.

       IP_RECVOPTS (od Linuksa 2.2)
              Przekazuje użytkownikowi wszystkie nadchodzące  opcje  IP  z  komunikatu  sterującego  IP_OPTIONS.
              Nagłówek  wyboru  trasy  i inne opcje są już wstępnie wypełnione informacjami o lokalnej maszynie.
              Nieobsługiwane w przypadku gniazd typu SOCK_STREAM.

       IP_RECVORIGDSTADDR (od Linuksa 2.6.29)
              Ta opcja logiczna włącza komunikat pomocniczy IP_ORIGDSTADDR w recvmsg(2), w którym  jądro  zwraca
              oryginalny  adres  docelowy  otrzymywanego  właśnie  datagramu.  Ten  komunikat pomocniczy zawiera
              strukturę struct sockaddr_in. Nieobsługiwane w przypadku gniazd SOCK_STREAM.

       IP_RECVTOS (od Linuksa 2.2)
              Jeśli jest ustawione, to pomocniczy komunikat IP_TOS  jest  przepuszczany  razem  z  nadchodzącymi
              pakietami.  Zawiera  on  bajt,  który  określa  pole zdefiniowane także jako bajt znajdujące się w
              nagłówku pakietu, a zwane Typ Usługi/Pierwszeństwa. Wymaga logicznego znacznika w  postaci  liczby
              całkowitej. Nieobsługiwane w przypadku gniazd SOCK_STREAM.

       IP_RECVTTL (od Linuksa 2.2)
              Gdy  ten znacznik jest ustawiony, przepuszczany jest komunikat pomocniczy IP_TTL, zawierający pole
              określane mianem „czas życia” odbieranego  pakietu  w  postaci  32-bitowej  liczby.  Nie  jest  to
              wspierane w przypadku strumieniowych gniazd typu SOCK_STREAM.

       IP_RETOPTS (od Linuksa 2.2)
              Działanie identyczne do IP_RECVOPTS, ale zwraca surowe, nieprzetworzone opcje, włącznie z rekordem
              opcji, mówiącym o znaczniku czasowym i trasie, niewypełnionym wartościami w tym przejściu pakietu.
              Nieobsługiwane w przypadku gniazd SOCK_STREAM.

       IP_ROUTER_ALERT (od Linuksa 2.2)
              Przekazuje  wszystkie  pakiety  z  opcją  alarmu  rutera  IP, które miałyby być przekazywane (ang.
              forwarded) do tego gniazda. Działa tylko dla gniazd surowych. Jest to przydatne  na  przykład  dla
              demonów  RSVP  działających  w  przestrzeni  użytkownika. Wykorzystane pakiety nie są przekazywane
              (ang. forwarded) przez jądro. Ponowne ich wysłanie  należy  do  obowiązków  programu  użytkownika.
              Dowiązywanie  gniazda  jest  w  tym  przypadku  ignorowane,  pakiety  te  są filtrowane jedynie na
              podstawie protokołu. Wymaga liczby całkowitej jako argumentu.

       IP_TOS (od Linuksa 1.0)
              Ustawia lub pobiera pole znacznika Typ-Usługi (ang. Type-Of-Service, w skrócie  TOS),  które  jest
              przesyłane  z  każdym  pakietem  IP  pochodzącym  z danego gniazda. Służy do ustalenia priorytetów
              pakietów w sieci.  TOS  jest  bajtem.  Oto  definicje  niektórych  standardowych  znaczników  TOS:
              IPTOS_LOWDELAY  -  minimalizacja  opóźnienia  we wzajemnym ruchu, IPTOS_THROUGHPUT - optymalizacja
              wyjścia, IPTOS_RELIABILITY - optymalizacja pod kątem niezawodności, a  IPTOS_MINCOST  powinna  być
              używana  jako „dane wypełniające” tam, gdzie szybkość transmisji nie ma większego znaczenia. Można
              podać najwyżej jedną z powyższych wartości TOS. Inne bity są niepoprawne i powinny być wyzerowane.
              Linux  domyślnie  wysyła  najpierw  datagram  IPTOS_LOWDELAY,  ale  dokładne  zachowanie zależy od
              konfiguracji właściwości  szeregowania.  Niektóre  poziomy  o  wysokim  priorytecie  mogą  wymagać
              uprawnień administratora (ustawionego atrybutu CAP_NET_ADMIN).

       IP_TRANSPARENT (od Linuksa 2.6.24)
              Ustawienie  tej  opcji logicznej włącza przezroczyste (ang. „transparent”) proxy dla tego gniazda.
              Ta opcja gniazda pozwala wywołującej aplikacji przypisanie gniazda do  nielokalnego  adresu  IP  i
              operowanie  jako  zarówno  klient,  jak  i  serwer  z  zewnętrznym adresem IP dla lokalnego punktu
              docelowego. UWAGA: wymaga to takiego ustawienia reguł trasowania, żeby  pakiety  wysyłane  na  ten
              adres  zewnętrzny były przekazywane przez TProxy (tj. system na którym działa aplikacja korzysta z
              opcji gniazda IP_TRANSPARENT). Włączenie tej  opcji  wymaga  uprawnień  administratora  (przywilej
              CAP_NET_ADMIN).

              Przekierowanie  TProxy  używające  celu  TPROXY z iptables(8) także wymagają włączenia tej opcji w
              przekierowywanym gnieździe.

       IP_TTL (od Linuksa 1.0)
              Ustawia lub pobiera pole „czas życia” (ang. Time-To-Live, w skrócie TTL) dla każdego  wychodzącego
              z danego gniazda pakietu IP.

       IP_UNBLOCK_SOURCE (od Linuksa 2.4.22 / 2.5.68)
              Odblokowuje  zablokowaną  uprzednio grupę adresów. Zwraca EADDRNOTAVAIL gdy podane źródło nie było
              zablokowane.

              Argumentem jest struktura ip_mreq_source opisana w części dotyczącej IP_ADD_SOURCE_MEMBERSHIP.

       SO_PEERSEC (od Linuksa 2.6.17)
              Jeśli na stacjach wysyłających i przyjmujących skonfigurowano etykietowany IPSEC lub NetLabel,  ta
              opcja  gniazda  tylko do odczytu zwraca kontekst bezpieczeństwa drugiego gniazda połączonego z tym
              gniazdem. Domyślnie będzie to taka sama wartość jak wartość kontekstu  procesu  tworzącego  drugie
              gniazdo, chyba że zostanie przesłoniona zasadami lub procesem z wymaganymi uprawnieniami.

              Argumentem do getsockopt(2) jest wskaźnik do bufora określonej długości w bajtach, którego łańcuch
              kontekstu bezpieczeństwa ma zostać skopiowany. Jeśli długość  bufora  jest  mniejsza  niż  długość
              łańcucha  kontekstu  bezpieczeństwa,  to  getsockopt(2) zwróci -1, ustawi errno na ERANGE i zwróci
              wymaganą długość za pomocą optlen. Wywołujący powinien początkowo przydzielić co najmniej NAME_MAX
              bajtów  dla  bufora,  choć  nie  ma  gwarancji,  że  będzie  to wielkość wystarczająca. Może zajść
              konieczność dostosowania wielkości bufora do zwróconej długości i wykonanie drugiego podejścia.

              Łańcuch kontekstu bezpieczeństwa może zawierać kończący znak null w zwracanej  długości,  ale  nie
              jest  to  gwarantowane. Kontekst bezpieczeństwa "foo" może być reprezentowany jako {'f','o','o'} o
              długości 3 lub {'f','o','o','\0'} o długości 4, oba te warianty są uważane za równorzędne. Łańcuch
              jest  drukowalny,  nie  zawiera  znaków  null  innych  niż  kończące  łańcuch oraz ma nieokreślone
              kodowanie (w szczególności, nie gwarantuje się kodowania ASCII lub UTF-8).

              Użycie tej opcji do gniazd w rodzinie adresowej AF_INET  jest  obsługiwane  od  Linuksa  2.6.17  w
              przypadku gniazd TCP, a od Linuksa 4.17 w przypadku gniazd SCTP.

              W  przypadku  SELinuksa,  NetLabel  przenosi  jedynie  część MLS kontekstu bezpieczeństwa partnera
              poprzez łącze, pozostała część kontekstu bezpieczeństwa uzyskuje wartości domyślne, zdefiniowane w
              początkowym  identyfikatorze  bezpieczeństwa  (SID) netmsg. NetLabel można jednak skonfigurować, w
              celu przesyłania  pełnego  kontekstu  bezpieczeństwa  pętlą  zwrotną.  Etykietowany  IPSEC  zawsze
              przekazuje  pełny kontekst bezpieczeństwa, jako część ustanawiania powiązania bezpieczeństwa (ang.
              security association – SA) i sprawdza je w zależności od powiązania dla każdego pakietu.

   Interfejsy /proc
       Protokół IP obsługuje zbiór interfejsów /proc i korzysta z  niech  do  ustawiania  niektórych  parametrów
       globalnych.  Parametry  są  dostępne   przez  zapis  lub  odczyt  plików  z katalogu /proc/sys/net/ipv4/.
       Interfejsy opisane jako logiczne pobierają liczbę całkowitą, której wartość niezerowa („prawda”) oznacza,
       że dana opcja jest włączona, a zero („fałsz”), oznacza, że opcja jest wyłączona.

       ip_always_defrag (logiczna; od Linuksa 2.2.13)
              [Nowa  w  Linuksie  2.2.13;  we  wcześniejszych  wersjach  jądra funkcją tą sterowało się w czasie
              kompilacji za pomocą opcji CONFIG_IP_ALWAYS_DEFRAG, która nie jest już obecna w Linuksie  2.4.x  i
              kolejnych]

              Gdy  ten znacznik logiczny jest włączony (różny od 0), przychodzące fragmenty (części pakietów IP,
              które się pojawiają, gdy pewien komputer pomiędzy komputerem źródłowym a docelowym  zdecyduje,  że
              pakiety  były za duże i podzieli je na kawałki) będą ponownie złożone (zdefragmentowane) przed ich
              przetworzeniem, nawet jeśli mają być przekazane dalej (and. forwarded).

              Należy włączać jedynie przy działającej zaporze sieciowej, stanowiącej  główne  wejście  do  danej
              sieci  lub działającym przezroczystym proxy; nigdy nie należy tego włączać na zwykłym routerze lub
              komputerze. W przeciwnym przypadku łączność może zostać zakłócona, gdy fragmenty  będą  podróżować
              innymi łączami. Defragmentacja powoduje również znaczne wykorzystanie pamięci i czasu procesora.

              Jest to włączane automagicznie, gdy skonfigurowane jest maskowanie lub przezroczyste proxy.

       ip_autoconfig (od Linuksa 2.2 do Linuksa 2.6.17)
              Nie udokumentowane.

       ip_default_ttl (liczba, domyślnie: 64; od Linuksa 2.2)
              Ustawia  domyślną  wartość  „czasu  życia” (ang. time-to-live) wychodzących pakietów. Może być ona
              zmieniona dla gniazda za pomocą opcji IP_TTL.

       ip_dynaddr (logiczna; domyślnie: wyłączona; od Linuksa 2.0.31)
              Włącza dynamiczne adresowanie gniazda oraz przepisywanie adresu dla maskowania przy zmianie adresu
              interfejsu.  Jest  to  bardzo przydatne w przypadku korzystania z interfejsu sprzęgniętego z linią
              telefoniczną, którego adres  IP  może  się  zmieniać.  0  oznacza  brak  przepisywania,  1  włącza
              przepisywanie, a 2 włącza tryb rozwlekły (ang. verbose).

       ip_forward(logiczna; domyślnie: wyłączona; od Linuksa 1.2)
              Włącza  przekazywanie  (ang.  forwarding)  pakietów  przy  użyciu  logicznego  znacznika. Może być
              ustawione także na podstawie interfejsu.

       ip_local_port_range (od Linuksa 2.2)
              Plik zawierający dwa liczby całkowite określające domyślny zakres lokalnych portów przypisanych do
              gniazd  niebędących  bezpośrednio  przydzielonych do portu — tj. zakres ten jest używany do portów
              efemerycznych (portów przypisywanych dynamicznie). Port efemeryczny jest przydzielany do gniazda w
              następujących sytuacjach:

              •  numer portu w adresie gniazda jest określony jako 0 w trakcie wywoływania bind(2);

              •  listen(2) jest wywoływane na gnieździe strumieniowym, które nie było wcześniej przydzielone;

              •  connect(2) była wywołana na gnieździe, które nie było wcześniej przydzielone;

              •  sendto(2) jest wywoływane na gnieździe datagramowym, które nie było wcześniej przydzielone.

              Przypisywanie  portów  efemerycznych  rozpoczyna  się od pierwszego numeru w ip_local_port_range i
              kończy się na drugim numerze. Jeśli wyczerpie się  zakres  portów  efemerycznych,  to  odpowiednie
              wywołanie systemowe zwróci błąd (ale proszę sprawdzić rozdział USTERKI!).

              Proszę  zauważyć,  że  zakres  portów  w  ip_local_port_range nie powinien pokrywać się z zakresem
              portów wykorzystywanym do maskowania (chociaż taka sytuacja jest obsługiwana). Dowolny wybór  może
              również  powodować problemy z niektórymi zaporami sieciowymi, które robią pewne założenia odnośnie
              do portów używanych lokalnie. Pierwsza liczba powinna być większa  niż  1024,  albo  -  co  byłoby
              lepsze  -  większa  niż  4096,  aby  uniknąć  konfliktów z dobrze znanymi portami i zminimalizować
              problemy z zaporami sieciowymi.

       ip_no_pmtu_disc (logiczna; domyślnie: wyłączona; od Linuksa 2.2)
              Jeśli jest to włączone, to domyślnie nie będzie wykonywane badanie MTU  ścieżki  dla  gniazd  TCP.
              Badanie   MTU   może   się  nie  sprawdzać  w  przypadku  źle  skonfigurowanych  zapór  sieciowych
              (odrzucających wszelkie pakiety ICMP) lub źle skonfigurowanych interfejsów  (np.  połączenie  typu
              point-to-point,  gdzie  oba  końce  nie  zgadzają  się  na MTU). Lepiej poprawić wszelkie wadliwie
              skonfigurowane  rutery  po  drodze  niż  całkowicie  wyłączyć  badanie   MTU   ścieżki,   ponieważ
              niewykonywanie tej operacji pociąga za sobą duże straty w obrębie sieci.

       ip_nonlocal_bind (logiczna; domyślnie: wyłączona; od Linuksa 2.4)
              Jeżeli  ustawione, pozwala procesowi na wywołanie funkcji bind() z nielokalnym adresem IP, co może
              być całkiem przydatne, ale może popsuć niektóre aplikacje.

       ip6frag_time (liczba; domyślnie: 30)
              Czas w sekundach przetrzymywania w pamięci fragmentu IPv6.

       ip6frag_secret_interval (liczba; domyślnie: 600)
              Interwał (w sekundach) odświeżania sekretnego klucza funkcji mieszającej  (lub  czasu  życia  tego
              klucza) dla fragmentów IPv6.

       ipfrag_high_thresh (liczba)
       ipfrag_low_thresh (liczba)
              Jeśli   liczba   zebranych   w   kolejce   fragmentów   IP   osiągnie   wartość   określoną  przez
              ipfrag_high_thresh, wtedy kolejka  jest  opróżniana  do  ilości  określonej  w  ipfrag_low_thresh.
              Zawiera ona liczbę całkowitą z podaną liczbą bajtów.

       neigh/*
              Patrz arp(7).

   Kontrolki systemowe (ioctl)
       Do protokołu ip mają zastosowanie wszystkie kontrolki wejścia/wyjścia opisane w socket(7).

       Kontrolki konfigurowania ogólnych parametrów urządzenia są opisane w netdevice(7).

BŁĘDY

       EACCES Użytkownik  próbował  wykonać operację, nie mając potrzebnych praw. Obejmuje to: wysyłanie pakietu
              na adres rozgłoszeniowy bez ustawionego znacznika SO_BROADCAST, wysyłanie pakietu zakazaną  drogą,
              próbę  modyfikacji  ustawień  zapory  sieciowej,  nie  mając uprawnień administratora (ustawionego
              przywileju  CAP_NET_ADMIN),  próbę  przypisania  uprzywilejowanego  portu,  nie  mając   uprawnień
              administratora (ustawionego przywileju CAP_NET_BIND_SERVICE).

       EADDRINUSE
              Próbowano przypisać port do adresu będącego już w użyciu.

       EADDRNOTAVAIL
              Zażądano nieistniejącego interfejsu lub żądany adres źródłowy nie jest adresem lokalnym.

       EAGAIN Operacja na gnieździe z wyłączonym blokowaniem spowodowałaby zablokowanie.

       EALREADY
              Operacja łączenia na gnieździe nieblokującym już trwa.

       ECONNABORTED
              Połączenie zostało zamknięte podczas accept(2).

       EHOSTUNREACH
              Brak  wpisu  określającego  adres  docelowy  w tabeli trasowania. Błąd ten może być wywołany przez
              komunikat ICMP od zdalnego routera lub dla lokalnej tabeli trasowania.

       EINVAL Przypisano niewłaściwy argument. W przypadku operacji wysyłania  może  to  być  spowodowane  przez
              wysyłanie drogą przypisaną do czarnej dziury.

       EISCONN
              connect(2) była wywołana na już połączonym gnieździe.

       EMSGSIZE
              Datagram jest większy niż wartość MTU po drodze do celu i nie może być podzielony.

       ENOBUFS
       ENOMEM Niewystarczająca  ilość  dostępnej  pamięci.  Często  oznacza  to,  że  przydzielanie pamięci jest
              ograniczone przez ograniczenia bufora gniazda, a nie przez ograniczenia pamięci systemowej. Jednak
              nie jest to pewne na 100%.

       ENOENT SIOCGSTAMP było wywołane na gnieździe, do którego nie dotarł żaden pakiet.

       ENOPKG Podsystem jądra nie był konfigurowany.

       ENOPROTOOPT i EOPNOTSUPP
              Przypisano niewłaściwą opcję gniazda.

       ENOTCONN
              Operacja może być wykonana tylko na połączonym gnieździe, a gniazdo nie zostało połączone.

       EPERM  Użytkownik  nie  ma  praw  do  ustawiania  wysokiego priorytetu, zmiany konfiguracji lub wysyłania
              sygnałów do żądanych procesów lub grup procesów.

       EPIPE  Połączenie zostało nieoczekiwanie zamknięte lub wyłączył się drugi koniec.

       ESOCKTNOSUPPORT
              Gniazdo nie jest skonfigurowane lub zażądano nieznanego typu gniazda.

       Inne błędy mogą być generowane przez  protokoły  wyższych  warstw;  obejrzyj  tcp(7),  raw(7),  udp(7)  i
       socket(7).

UWAGI

       IP_FREEBIND,   IP_MSFILTER,   IP_MTU,   IP_MTU_DISCOVER,   IP_RECVORIGDSTADDR,   IP_PASSSEC,  IP_PKTINFO,
       IP_RECVERR, IP_ROUTER_ALERT, and IP_TRANSPARENT są typowo Linuksowe.

       Należy być bardzo ostrożnym  przy  stosowaniu  opcji  SO_BROADCAST  -  nie  jest  ona  w  systemie  Linux
       uprzywilejowana,  jest  więc  łatwo  przeciążyć  sieć  za pomocą niedbale użytych rozgłoszeń. W przypadku
       protokołów nowych  aplikacji  lepiej  używać  grupy  adresowej  zamiast  rozgłoszeń.  Stosowanie  adresów
       rozgłoszeniowych  jest  niezalecane.  W RFC 6762 pokazany jest przykład protokołu (mDNS) korzystającego z
       nowocześniejszego podejścia do komunikacji z otwartą grupą stacji w sieci lokalnej.

       Niektóre inne implementacje gniazd BSD dopuszczają dla gniazd opcje IP_RCVDSTADDR i IP_RECVIF używane  do
       pobierania  adresu  przeznaczenia  i  interfejsu odbieranych datagramów. Linux udostępnia bardziej ogólną
       opcję IP_PKTINFO, robiącą to samo.

       Niektóre implementacja gniazd BSD także  udostępniają  opcję  IP_RECVTTL,  ale  łącznie  z  przychodzącym
       pakietem  jest  przekazywany pomocniczy komunikat o typie IP_RECVTTL. W tym właśnie różni się to od opcji
       IP_TTL, używanej w Linuksie.

       Używanie poziomu opcji gniazd SOL_IP jest nieprzenośne; gniazda oparte na BSD używają poziomu IPPROTO_IP.

       INADDR_ANY (0.0.0.0) i INADDR_BROADCAST (255.255.255.255)  są  neutralne  pod  kątem  kolejności  bajtów.
       Oznacza to, że nie wpływa na nie htonl(3).

   Zgodność
       Dla  zgodności z Linuksem 2.0, wciąż jest dopuszczalna przestarzała składnia socket(AF_INET, SOCK_PACKET,
       protokół), by stworzyć gniazdo typu packet(7). Nie jest to zbyt poprawne i powinno być zastępowane  przez
       socket(AF_PACKET,  SOCK_RAW,  protokół).  Głównym powodem jest różnica w strukturze adresowej sockaddr_ll
       przechowującej informacje dla warstwy łącza (dokładniej: warstwy kanałowej), które  kiedyś  przechowywane
       były w sockaddr_pkt.

USTERKI

       Jest zbyt wiele nieokreślonych wartości błędów.

       Błąd   używany   do  zdiagnozowania  wyczerpania  się  zakresu  portów  efemerycznych  różni  się  między
       poszczególnymi wywołaniami systemowymi (connect(2),  bind(2),  listen(2),  sendto(2)),  które  przypisują
       porty efemeryczne.

       Nie są opisane kontrolki wejścia/wyjścia do konfigurowania specyficznych dla IP opcji interfejsu i tabele
       ARP.

       Pobieranie pierwotnego adresu docelowego za pomocą wywołania recvmsg(2) z  MSG_ERRQUEUE  w  msg_name  nie
       działa w niektórych jądrach Linux 2.2.

ZOBACZ TAKŻE

       recvmsg(2),  sendmsg(2),  byteorder(3),  capabilities(7),  icmp(7),  ipv6(7),  netdevice(7),  netlink(7),
       raw(7), socket(7), tcp(7), udp(7), ip(8)

       Plik źródeł jądra Documentation/networking/ip-sysctl.txt.

       RFC 791 - oryginalny opis IP. RFC 1122 - wymagania stacji IPv4. RFC 1812 - wymagania rutera IPv4.

TŁUMACZENIE

       Autorami polskiego tłumaczenia niniejszej strony podręcznika są: Paweł Wilk <siefca@pl.qmail.org>, 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⟩.