Berkeley sockets

Berkeley sockets (BSD sockets) on Berkeley Software Distributionissa (BSD) esitelty ohjelmointirajapinta (API) prosessien väliseen kommunikointiin niin sanotuilla pistokkeilla. BSD rajapinnasta on tullut de facto standardi lähes sellaisenaan, jota kutsutaan myös POSIX-standardissa nimellä POSIX sockets.

Rajapinta julkaistiin ensimmäisenä 4.2BSD:ssä.

Windowsin Winsock-rajapinta on toinen vastaavankaltainen. Winsock-rajapinnassa on POSIX-määrittelyn mukaiset toiminnot. Macintosh-alustalla rajapinnan funktioiden nimeäminen on poikennut yleisesti käytetystä. iOS-alustalla rajapinta on merkittävästi erilainen. Muita erilaisia rajapintoja on X/Open Transport Interface (XTI).

Useimmat alustat nykyisin toteuttavat POSIX-määrittelyn mukaisen version verkko-ohjelmointiin.

Toiminnot 
Pistoke () on rajapinnassa käytettävä tiedostokahva (), jonka kautta tietoa vastaanotetaan ja lähetetään.

Rajapintaa voidaan käyttää useiden protokollien kanssa kuten:
 AF_UNIX, AF_LOCAL: Unix-domain sockets, paikallinen
 AF_INET: IPv4
 AF_INET: IPv6
 AF_IPX: Novellin IPX
 AF_APPLETALK: Applen AppleTalk

Rajapintaa voidaan käyttää useiden tyyppien (kommunikointityylien) kanssa, joista tavallisimmat ovat SOCK_STREAM ja SOCK_DGRAM. Muita ovat SOCK_RAW, SOCK_RDM ja SOCK_SEQPACKET. Rajapintaa voidaan käyttää sekä yhteydellisille että yhteydettömille tavoille.

Keskeiset järjestelmäkutsut rajapinnassa ovat:
 socket
 close
 connect
 bind
 listen
 accept

Tiedonsiirto toimii kuten tiedostojen kanssa: rajapinnan avulla luetaan ja kirjoitetaan tietoa käyttäen järjestelmäkutsupareja:
 read, write
 recv, send
 recvfrom, sendto
 recvmsg, sendmsg
 readv, writev

Rajapinta antaa onnistumisen merkin kun tieto on hyväksytty siirrettäväksi. Rajapinnan toiminta voidaan asettaa ei-pysäyttäväksi (), jolloin funktiokutsut eivät jää odottamaan.

Rajapinnan ja kommunikoinnin toimintaa voidaan muuttaa muun muassa getsockopt ja setsockopt järjestelmäkutsujen avulla.

Lähteet

Kirjallisuutta

Aiheesta muualla 
 Beej's Guide to Network Programming 

Ohjelmointirajapinnat