JMÉNO
socket − vytvoř soket
SYNTAXE
#include
<sys/types.h>
#include <sys/socket.h>
int socket(int domain, int type, int protocol);
POPIS
Socket vytvoří soket a vrátí jeho deskriptor.
Parametr domain specifikuje jmenný prostor, ve kterém se bude komunikace odehrávat; tím je zvolena i rodina protokolů, které mohou být použity. Tyto rodiny jsou definovány v hlavičkovém souboru sys/socket.h. V současné době jsou podporovány tyto formáty:
AF_UNIX |
(interní protokol UNIXu) |
|||
AF_INET |
(Internetový jmenný prostor) |
|||
AF_ISO |
(protokoly ISO) |
|||
AF_NS |
(protokoly Xerox Network Systems) |
AF_IMPLINK
(IMP “host at IMP” link layer)
Soket má typ type, který specifikuje komunikační styl. Podporované typy jsou:
SOCK_STREAM
SOCK_DGRAM
SOCK_RAW
SOCK_SEQPACKET
SOCK_RDM
A SOCK_STREAM poskytuje sekvenční, spolehlivou a dvoustrannou proudovou komunikaci. Může být podporován mechanismus přenosu out-of-band dat. SOCK_DGRAM soket podporuje datagramy (nespojované, nespolehlivé zprávy pevné (typicky malé) maximální délky). SOCK_SEQPACKET soket poskytuje sekvenční, spolehlivý, dvojstranný přenos dat pro datagramy pevné maximální délky; konzument může číst tato data voláním jádra. Tento typ je v současné době implementován pouze pro AF_NS. SOCK_RAW poskytuje přístup k interním síťovým protokolům a rozhraním. Typy SOCK_RAW, který je k dispozici pouze superuživateli a SOCK_RDM, který je plánován, ale ještě není implementován, zde nejsou popsány.
Argument protocol specifikuje, který konkrétní protokol má být použit. Normálně existuje pouze jeden protokol, který se dá použít u soketu konkrétního typu a dané rodiny protokolů. Ale je samozřejmě možné, aby existovalo protokolů více. Číslo protokolu závisí na použitém jmenném prostoru, bližší informace naleznete v protocols(5).
Sokety typu SOCK_STREAM jsou plně duplexní proudy dat podobné rourám. Proudový soket musí být spojen před tím, než přijme nebo pošle jakákoliv data. Spojení s jiným soketem se provádí voláním connect(2). Jestliže bylo spojení navázáno, mohou být přenášena data pomocí volání read(2) a write(2) nebo některou variantou volání send(2) a recv(2). Je-li sezení ukončeno, můžete zavolat funkci close(2). Out-of-band data mohou být poslána. Konkrétní informace najdete v send(2). Out-of-band data mohou být přijata voláním recv(2).
Komunikační protokoly, které implementují SOCK_STREAM zaručují, že data se neztratí a ani nebudou duplikována. Je-li část dat, pro kterou je k dispozici prostor ve vyrovnávací paměti, nedoručena po rozumnou dobu, je spojení prohlášeno za přerušené a volání budou vracet chyby (−1) a globální proměnná errno bude nastavena na ETIMEDOUT .
Některé protokoly uchovávají sokety v činnosti tím, že přibližně každou minutu posílají packet, nevyskytuje-li se jiná aktivita. Neobjeví-li se odpověď po delší dobu (např. 5 minut), je opět indikována chyba. Signál SIGPIPE je poslán procesu, jestliže proces pošle data do "rozbitého" proudu. To způsobí, že "naivní" procesy, které neobsluhují tento signál skončí.
SOCK_SEQPACKET sokety používají stejná volání jako SOCK_STREAM sokety. Jediným rozdílem je, že volání read(2) vrací pouze požadované množství dat a ostatní data budou zničena.
SOCK_DGRAM a SOCK_RAW sokety povolují posílání paketů adresátům specifikovaným ve volání send(2). Datagramy jsou obvykle přijímány pomocí volání recvfrom(2), které vrací další datagram s jeho návratovou adresou.
Volání fcntl(2) může být použito ke specifikování skupiny procesů, které obdrží signál SIGURG při příchodu out-of-band dat. Může také povolit neblokující vstupně-výstupní operace případně asynchronní hlášení vstupně-výstupních událostí signálem SIGIO.
Operace soketu jsou řízeny volbami soketů. Tyto volby jsou specifikovány v hlavičkovém souboru sys/socket.h. Setsockopt(2) a getsockopt(2) se používají pro jejich nastavení a k získání jejich aktuálního stavu.
NÁVRATOVÁ HODNOTA
−1 je vrácena, jestliže nastala chyba, jinak je vrácen deskriptor soketu.
CHYBY
EPROTONOSUPPORT
Komunikační styl nebo protokol není podporován specifikovaným jmenným prostorem.
EMFILE |
Tabulka deskriptorů procesu je zaplněna. | ||
ENFILE |
Tabulka otevřených souborů systému je zaplněna. | ||
EACCESS |
Nemáte právo vytvořit soket specifikovaného typu a/nebo protokolu. | ||
ENOBUFS |
Nedostatek vyrovnávacích pamětí. Soket nemůže být vytvořen, dokud nedojde k uvolnění zdrojů. |
SPLŇUJE STANDARDY
4.4BSD (volání jádra socket se objevilo v 4.2BSD). Obvykle je kompatibilní s ne-BSD systémy, které podporují BSD Sokety (včetně variant Systému V).
DALŠÍ INFORMACE
accept(2), bind(2), connect(2), getprotoent(3), getsockname(2), getsockopt(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 vydáno v UNIX Programmer’s Supplementary Documents Volume 1
"BSD Interprocess Communication Tutorial" je znovu vydáno v UNIX Programmer’s Supplementary Documents Volume 1
VAROVÁNÍ
Překlad je pravděpodobně zastaralý. Pokud chcete pomoci s jeho aktualizací, zamiřte na http://man-pages-cs-wiki.homelinux.net/