Berkeley sockets
Berkeley sockets (nebo také BSD sockets) jsou v informatice název počítačové knihovny disponující API pro internetové sockety a Unix domain sockety, které jsou používány pro meziprocesovou komunikaci (IPC).
Historie
BSD sockets se poprvé objevily v operačním systému Unix BSD verze 4.2, který byl uvolněn v roce 1983. Aktuálně je implementace BSD sockets dostupná v každém moderním operačním systému a jedná se tak o standard v rámci připojování k Internetu.
C a další programovací jazyky
API BSD sosckets je psáno v jazyce C. Dostupné je i v dalších jazycích, nicméně i tyto implementace vycházejí většinou z implementace pro jazyk C.
Hlavičkové soubory
Rozhraní Berkeley sockets je definováno v několika hlavičkových souborech. Jména a obsah souborů se může mírně lišit dle implementace, obecně jsou to ale tyto soubory:
<sys/socket.h>
- Základní funkce a datové struktury BSD sockets.
<netinet/in.h>
- Adresy AF INET a AF INET6 a k nim odpovídající protokoly PF_INET and PF_INET6. Používají se běžně na internetu a obsahují IP adresy a čísla portů TCP a UDP.
<sys/un.h>
- Skupina adres PF_UNIX/PF_LOCAL. Používá se pro lokální komunikaci v rámci jednoho stroje.
<arpa/inet.h>
- Funkce pro manipulaci s číselnými IP adresami.
<netdb.h>
- Funkce pro překlad jmen protokolů a jmen hostů do jejich číselné podoby. Využívá k tomu lokální data i DNS.
Funkce socket API

Níže je uveden výpis funkcí, které nabízí API BSD sockets:
-
socket()
vytváří nový socket daného typu, identifikovaný celým číslem, s alokovanými systémovými prostředky. -
bind()
je obvykle používán na straně serveru a typicky spojuje lokální port s IP adresou. -
listen()
se používá na straně serveru uvádí TCP socket do stavu listen. -
connect()
se používá na straně klienta a přiřazuje volný lokální port k socketu. V případě TCP socketu vytvoří nové TCP spojení. -
accept()
se používá na straně serveru. Potvrzuje příchozí požadavek na ustavení nového TCP spojení od vzdáleného klienta a vytváří nový socket. -
send()
arecv()
, nebowrite()
aread()
, nebosendto()
arecvfrom()
, se používají pro odesílání a přijímání dat z/na vzdálený socket. -
close()
požádá systém o uvolnění prostředků, které měl socket alokované. V případě TCP je spojení přerušeno. -
gethostbyname()
agethostbyaddr()
se používají pro vzájemný překlad jmen hostů a adres. Podporováno je pouze IPv4. -
select()
je využíván k čekání, než bude socket nebo seznam socketů připraven. -
poll()
se používá ke kontrole stavu socketu ze skupiny socketů. Skupina může být kontrolována, zda je možné do některého socketu zapsat, číst z něj, nebo zda nenastala nějaká chyba. -
getsockopt()
umožňuje získat aktuální stav dané vlastnosti socketu. -
setsockopt()
umožňuje nastavit hodnotu dané vlastnosti socketu.
Externí odkazy
- https://www.ipv6.cz/BSD_sockets_-_%C3%9Avod[nedostupný zdroj]
- http://www.cs.vsb.cz/grygarek/LAN/sockets.html
- http://www.earchiv.cz/a93/a315c110.php3
- http://manned.org/socket/dbe8b1f8