Provided by: manpages-pl_20060617-4_all bug

NAZWA

       unix,   PF_UNIX,   AF_UNIX,   PF_LOCAL,  AF_LOCAL  -  gniazda  lokalnej
       komunikacji midzyprocesowej

SK/LADNIA

       #include <sys/socket.h>
       #include <sys/un.h>

       unix_socket = socket(PF_UNIX, type, 0);
       error = socketpair(PF_UNIX, type, 0, int *sv);

OPIS

       Rodzina gniazd PF_UNIX (znana rownie jako PF_LOCAL)  sluy  do  wydajnej
       komunikacji  pomidzy  procesami na tej samej maszynie. Gniazda uniksowe
       mog by albo anonimowe (tworzone przez socketpair(2)), albo skojarzone z
       plikiem  typu  gniazda.  Linux  wspiera rownie abstrakcyjn, niezalen od
       systemu plikow przestrze nazw.

       Prawidlowe typy to SOCK_STREAM dla  gniazd  strumieniowych,  SOCK_DGRAM
       dla   gniazd  datagramowych,  ktore  zachowuj  granice  komunikatow  (w
       przypadku wikszoci implementacji  Uniksa   gniazda  uniksowe  s  zawsze
       niezawodne  i  nie zmieniaj kolejnoci datagramow), oraz (od wersji jdra
       2.6.4) SOCK_SEQPACKET  dla  gniazd  zorientowanych  polczeniowo,  ktore
       zachowuj  granice  komunikatu  i  dostarczaj komunikaty w kolejnoci ich
       wysylania.

       Za porednictwem  pomocniczych  danych  mona  poprzez  gniazda  uniksowe
       przekazywa  do  innych  procesow  deskryptory plikow i uwierzytelnianie
       procesow.

FORMAT ADRESU

       Adres gniazda uniksowego jest zdefiniowany jako nazwa pliku w  systemie
       plikow  lub  jako  unikatowy  lacuch  w abstrakcyjnej przestrzeni nazw.
       Gniazda utworzone  za  pomoc  socketpair(2)  s  anonimowe.  Dla  gniazd
       nieanonimowych  adres  docelowy  mona ustawi za pomoc connect(2). Adres
       lokalny mona ustawi za pomoc bind(2). Gdy gniazdo  jest  polczone,  ale
       nie   posiada   jeszcze   adresu   lokalnego,   jest   mu  przypisywany
       automatycznie wygenerowany unikatowy adres w abstrakcyjnej  przestrzeni
       nazw.

         #define UNIX_PATH_MAX    108

         struct sockaddr_un {
             sa_family_t    sun_family;               /* AF_UNIX */
             char           sun_path[UNIX_PATH_MAX];  /* cieka dostpu */
         };

       sun_family  zawsze  ma warto AF_UNIX. sun_path zawiera zakoczon znakiem
       null nazw cieki dostpu do  gniazda  w  systemie  plikow.  Gdy  sun_path
       zaczyna si bajtem zerowym (" '), odnosi si do abstrakcyjnej przestrzeni
       nazw,  ktor  zarzdza  modul  protokolu  Unix.  Adres  gniazda   w   tej
       przestrzeni  nazw  stanowi  pozostale  bajty  sun_path. Naley zauway, e
       nazwy w abstrakcyjnej przestrzeni nazw nie s zakoczone znakiem null.

OPCJE GNIAZD

       Ze wzgldow historycznych nastpujce opcje gniazd s podawane  przy  typie
       SOL_SOCKET,  pomimo  e s one specyficzne dla PF_UNIX. Mona je ustawi za
       pomoc setsockopt(2), a odczyta za pomoc getsockopt(2) podajc SOL_SOCKET
       jako rodzin gniazd.

       SO_PASSCRED
              Wlcza   otrzymywanie   uwierzytelnie   od   procesu  wysylajcego
              komunikat pomocniczy. Przy wlczonej tej opcji  i  nie  polczonym
              jeszcze   gniedzie,  unikatowa  nazwa  gniazda  z  abstrakcyjnej
              przestrzeni nazw jest generowana automatycznie. Oczekiwany  jest
              logiczny znacznik typu calkowitego.

CECHY (NIE)WSPIERANE

       W  olejnych  paragrafach  opisano  pewnie  szczegoly  implementacji API
       gniazd domeny Unix specyficzne dla Linuksa oraz cechy niewspierane.

       Gniazda strumieniowe z domeny uniksowej nie  obsluguj  zawiadomienia  o
       danych autonomicznych (flaga MSG_OOB funkcji send(2) i recv(2)).

       Flaga  MSG_MORE  funkcji send(2) nie jest obslugiwana dla gniazd domeny
       Unix.

       Opcje SO_SNDBUF dziala w przypadku gniazd domeny uniksowej,  ale  opcja
       SO_RCVBUF  ju  nie.  Dla  gniazd  datagramowych warto SO_SNDBUF naklada
       gorny limit na rozmiar wychodzcych datagramow. Limit ten  jest  liczony
       jako podwojona (patrz socket(7)) warto opcji minus 32 bajty wymagane na
       informacje nie bdce danymi.

KOMUNIKATY POMOCNICZE

       Dane  pomocnicze  s  wysylane  i  odbierane  za  pomoc   sendmsg(2)   i
       recvmsg(2).  Ze  wzgldow  historycznych komunikaty pomocnicze poniszych
       typow s podawane przy typie SOL_SOCKET, pomimo e s one specyficzne  dla
       PF_UNIX.  Aby  je wysla, naley ustawi pole cmsg_level struktury cmsghdr
       na SOL_SOCKET a pole cmsg_type na typ. Wicej informacji  mona  znale  w
       cmsg(3).

       SCM_RIGHTS
              Odbieranie  od  innego  procesu  lub  wysylanie  do niego zbioru
              otwartych deskryptorow  plikow.  Porcja  danych  zawiera  tablic
              liczb   calkowitych   bdcych  deskryptorami  plikow.  Przekazane
              deskryptory plikow zachowuj si tak, jakby zostaly  utworzone  za
              pomoc dup(2).

       SCM_CREDENTIALS
              Odbieranie  lub  wysylanie uwierzytelnie uniksowych. Moe sluy do
              autoryzacji.  Uwierzytelnienia  s  przekazywane  jako  komunikat
              pomocniczy typu struct ucred.

                struct ucred {
                    pid_t pid;  /* identyfikator procesu wysylajcego */
                    uid_t uid;  /* ident. uytkownika procesu wysylajcego */
                    gid_t gid;  /* ident. grupy procesu wysylajcego */
                };

              Jdro  sprawdza uwierzytelnienia podane przez wysylajcego. Proces
              o efektywnym ID uytkownika rownym 0 moe poda wartoci, ktore roni
              si  od  jego  wlasnych. W pozostalych przepadkach wysylajcy musi
              poda swoj wlasny identyfikator procesu (o ile nie ma ustawionego
              znacznika  CAP_SYS_ADMIN), swoj wlasny identyfikator uytkownika,
              efektywny identyfikator uytkownika lub  ustawiony  identyfikator
              uytkownika  (o ile nie ma ustawionego znacznika CAP_SETUID) oraz
              swoj wlasny identyfikator grupy, efektywny  identyfikator  grupy
              lub  ustawiony  identyfikator  grupy  (o  ile nie ma ustawionego
              znacznika CAP_SETGID). Aby otrzyma komunikat typu struct  ucred,
              dla gniazda musi by wlczona opcja SO_PASSCRED.

WERSJE

       SCM_CREDENTIALS  oraz abstrakcyjna przestrze nazw zostaly wprowadzone w
       Linuksie 2.2 i nie naley ich uywa w  przenonych  programach.  (Niektore
       systemy  wywodzce si z BSD rownie wspieraj przekazywanie uwierzytelnie,
       ale implementacje roni si w szczegolach.)

UWAGI

       W linuksowej implementacji, gniazda widoczne w systemie  plikow  stosuj
       si do uprawnie katalogu, w ktorym si znajduj. Ich wlaciciela, grup oraz
       prawa dostpu mona  zmienia.  Gdy  proces  nie  posiada  praw  zapisu  i
       przeszukiwania  (uruchamiania)  do  katalogu,  w  ktorym  tworzone jest
       gniazdo, jego utworzenie si nie powiedzie. Polczenie z obiektem gniazda
       wymaga  praw  odczytu/zapisu.  Takie  zachowanie  roni si od zachowania
       wielu systemow wywodzcych sie z  BSD,  ktore  ignoruj  uprawnienia  dla
       gniazd  uniksowych.  Programy  przenone  ze  wzgldow  bezpieczestwa nie
       powinny polega na tej cesze.

       W trakcie lczenia si z gniazdem posiadajcym nazw pliku,  tworzone  jest
       plik  specjalny  gniazda  w systemie plikow, ktory musi zosta skasowany
       przez wywolujcego, gdy ju nie bdzie  potrzebny  (za  pomoc  unlink(2)).
       Stosuje  si  tu  zwykla  uniksowa  skladnia  oponionego zamknicia (ang.
       close-behind); gniazdo mona skasowa w dowolnym momencie, a zostanie ono
       ostatecznie  usunite z systemu plikow po zamkniciu ostatniego odwolania
       do niego.

       Aby  przekaza   deskryptory   plikow   lub   uwierzytelnienia   poprzez
       SOCK_STREAM  trzeba wysla/odebra co najmniej jeden bajt niepomocniczych
       danych w tym samym wywolaniu sendmsg() lub recvmsg()

       Gniazda strumieniowe z domeny uniksowej nie  obsluguj  zawiadomienia  o
       danych autonomicznych.

B/LDY

       ENOMEM Brak pamici.

       ECONNREFUSED
              Wywolano  connect(2)  dla obiektu gniazda, ktory nie nasluchuje.
              Moe si to zdarzy, gdy zdalne  gniazdo  nie  istnieje  lub  nazwa
              pliku nie odnosi si do gniazda.

       EINVAL Podano  nieprawidlowy  argument.  Najczstsz  przyczyn  jest brak
              ustawionego  AF_UNIX  w  polu  sun_type  przekazywanych  gniazdu
              adresow lub nieprawidlowy dla danej operacji stan gniazda.

       EOPNOTSUPP
              Operacja strumieniowa wywolana dla gniazda niestrumieniowego lub
              proba uycia opcji danych autonomicznych.

       EPROTONOSUPPORT
              Podanym protokolem nie jest PF_UNIX.

       ESOCKTNOSUPPORT
              Nieznany typ gniazda.

       EPROTOTYPE
              Typ  gniazda  zdalnego  roni  si  od  typu   gniazda   lokalnego
              (SOCK_DGRAM wobec SOCK_STREAM)

       EADDRINUSE
              Wybrany  adres  lokalny jest zajty lub obiekt gniazda w systemie
              plikow ju istnieje.

       EISCONN
              Wywolano connect(2) dla ju polczonego gniazda lub  podano  adres
              docelowy dla polczonego gniazda.

       ENOTCONN
              Operacja  na  gniedzie  wymaga  adresu docelowego, a gniazdo nie
              jest polczone.

       ECONNRESET
              Zdalne gniazdo zostalo nieoczekiwanie zamknite.

       EPIPE  Zdalne  gniazdo  strumieniowe  zostalo  zamknite.  Gdy  wlczone,
              wysylany  jest  jednoczenie  sygnal  SIGPIPE.  Mona  tego  unikn
              przekazujc znacznik MSG_NOSIGNAL do sendmsg(2) lub recvmsg(2).

       EFAULT Nieprawidlowy adres pamici uytkownika.

       EPERM  Wysylajcy podal nieprawidlowe uwierzytelnienia w struct ucred.

       Inne bldy mog zosta wygenerowane  przez  podstawow  warstw  gniazd  lub
       przez  system  plikow  podczas  tworzenia  obiektu  gniazda  w systemie
       plikow.  Wicej  informacji  mona   znale   na   odpowiednich   stronach
       podrcznika.

ZOBACZ TAKE

       recvmsg(2),     sendmsg(2),    socket(2),    socketpair(2),    cmsg(3),
       capabilities(7), socket(7)

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.