SOCKET(2) Linux - prirucka programatora SOCKET(2)
JMENO
socket - vytvor soket
SYNTAXE
#include <sys/types.h>
#include <sys/socket.h>
int socket(int domain, int type, int protocol);
POPIS
Socket vytvori soket a vrati jeho deskriptor.
Parametr domain specifikuje jmenny prostor, ve kterem se bude komuni-
kace odehravat; tim je zvolena i rodina protokolu, ktere mohou byt
pouzity. Tyto rodiny jsou definovany v hlavickovem souboru sys/soc-
ket.h. V soucasne dobe jsou podporovany tyto formaty:
AF_UNIX (interni protokol UNIXu)
AF_INET (Internetovy jmenny prostor)
AF_ISO (protokoly ISO)
AF_NS (protokoly Xerox Network Systems)
AF_IMPLINK
(IMP "host at IMP" link layer)
Soket ma typ type, ktery specifikuje komunikacni styl. Podporovane typy
jsou:
SOCK_STREAM
SOCK_DGRAM
SOCK_RAW
SOCK_SEQPACKET
SOCK_RDM
A SOCK_STREAM poskytuje sekvencni, spolehlivou a dvoustrannou proudovou
komunikaci. Muze byt podporovan mechanismus prenosu out-of-band dat.
SOCK_DGRAM soket podporuje datagramy (nespojovane, nespolehlive zpravy
pevne (typicky male) maximalni delky). SOCK_SEQPACKET soket poskytuje
sekvencni, spolehlivy, dvojstranny prenos dat pro datagramy pevne
maximalni delky; konzument muze cist tato data volanim jadra. Tento typ
je v soucasne dobe implementovan pouze pro AF_NS. SOCK_RAW poskytuje
pristup k internim sitovym protokolum a rozhranim. Typy SOCK_RAW,
ktery je k dispozici pouze superuzivateli a SOCK_RDM, ktery je
planovan, ale jeste neni implementovan, zde nejsou popsany.
Argument protocol specifikuje, ktery konkretni protokol ma byt pouzit.
Normalne existuje pouze jeden protokol, ktery se da pouzit u soketu
konkretniho typu a dane rodiny protokolu. Ale je samozrejme mozne, aby
existovalo protokolu vice. Cislo protokolu zavisi na pouzitem jmennem
prostoru, blizsi informace naleznete v protocols(5).
Sokety typu SOCK_STREAM jsou plne duplexni proudy dat podobne rouram.
Proudovy soket musi byt spojen pred tim, nez prijme nebo posle
jakakoliv data. Spojeni s jinym soketem se provadi volanim connect(2).
Jestlize bylo spojeni navazano, mohou byt prenasena data pomoci volani
read(2) a write(2) nebo nekterou variantou volani send(2) a recv(2).
Je-li sezeni ukonceno, muzete zavolat funkci close(2). Out-of-band
data mohou byt poslana. Konkretni informace najdete v send(2). Out-of-
band data mohou byt prijata volanim recv(2).
Komunikacni protokoly, ktere implementuji SOCK_STREAM zarucuji, ze data
se neztrati a ani nebudou duplikovana. Je-li cast dat, pro kterou je k
dispozici prostor ve vyrovnavaci pameti, nedorucena po rozumnou dobu,
je spojeni prohlaseno za prerusene a volani budou vracet chyby (-1) a
globalni promenna errno bude nastavena na ETIMEDOUT .
Nektere protokoly uchovavaji sokety v cinnosti tim, ze priblizne kazdou
minutu posilaji packet, nevyskytuje-li se jina aktivita. Neobjevi-li se
odpoved po delsi dobu (napr. 5 minut), je opet indikovana chyba. Signal
SIGPIPE je poslan procesu, jestlize proces posle data do "rozbiteho"
proudu. To zpusobi, ze "naivni" procesy, ktere neobsluhuji tento
signal skonci.
SOCK_SEQPACKET sokety pouzivaji stejna volani jako SOCK_STREAM sokety.
Jedinym rozdilem je, ze volani read(2) vraci pouze pozadovane mnozstvi
dat a ostatni data budou znicena.
SOCK_DGRAM a SOCK_RAW sokety povoluji posilani paketu adresatum speci-
fikovanym ve volani send(2). Datagramy jsou obvykle prijimany pomoci
volani recvfrom(2), ktere vraci dalsi datagram s jeho navratovou adre-
sou.
Volani fcntl(2) muze byt pouzito ke specifikovani skupiny procesu,
ktere obdrzi signal SIGURG pri prichodu out-of-band dat. Muze take
povolit neblokujici vstupne-vystupni operace pripadne asynchronni
hlaseni vstupne-vystupnich udalosti signalem SIGIO.
Operace soketu jsou rizeny volbami soketu. Tyto volby jsou specifi-
kovany v hlavickovem souboru sys/socket.h. Setsockopt(2) a getsoc-
kopt(2) se pouzivaji pro jejich nastaveni a k ziskani jejich aktualniho
stavu.
NAVRATOVA HODNOTA
-1 je vracena, jestlize nastala chyba, jinak je vracen deskriptor
soketu.
CHYBY
EPROTONOSUPPORT
Komunikacni styl nebo protokol neni podporovan specifikovanym
jmennym prostorem.
EMFILE Tabulka deskriptoru procesu je zaplnena.
ENFILE Tabulka otevrenych souboru systemu je zaplnena.
EACCESS Nemate pravo vytvorit soket specifikovaneho typu a/nebo proto-
kolu.
ENOBUFS Nedostatek vyrovnavacich pameti. Soket nemuze byt vytvoren,
dokud nedojde k uvolneni zdroju.
SPLNUJE STANDARDY
4.4BSD (volani jadra socket se objevilo v 4.2BSD). Obvykle je kompati-
bilni s ne-BSD systemy, ktere podporuji BSD Sokety (vcetne variant
Systemu V).
DALSI INFORMACE
accept(2), bind(2), connect(2), getprotoent(3), getsockname(2), getsoc-
kopt(2), ioctl(2), listen(2), read(2), recv(2), select(2), send(2),
shutdown(2), socketpair(2), write(2)
"An Introductory 4.3 BSD Interprocess Communication Tutorial" je znovu
vydano v UNIX Programmer's Supplementary Documents Volume 1
"BSD Interprocess Communication Tutorial" je znovu vydano v UNIX Pro-
grammer's Supplementary Documents Volume 1
BSD Man Page 4. dubna 1997 SOCKET(2)