Provided by:
manpages-pl_20060617-4_all 
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.