Berkeley sockets
Berkeley sockets (BSD sockets) on Berkeley Software Distributionissa (BSD) esitelty ohjelmointirajapinta (API) prosessien väliseen kommunikointiin niin sanotuilla pistokkeilla.[1][2] BSD rajapinnasta on tullut de facto standardi lähes sellaisenaan, jota kutsutaan myös POSIX-standardissa nimellä POSIX sockets.[3][4][5]
Rajapinta julkaistiin ensimmäisenä 4.2BSD:ssä.[6]
Windowsin Winsock-rajapinta on toinen vastaavankaltainen.[7][8] Winsock-rajapinnassa on POSIX-määrittelyn mukaiset toiminnot.[9] Macintosh-alustalla rajapinnan funktioiden nimeäminen on poikennut yleisesti käytetystä.[10] iOS-alustalla rajapinta on merkittävästi erilainen.[11] Muita erilaisia rajapintoja on X/Open Transport Interface (XTI).[12]
Useimmat alustat nykyisin toteuttavat POSIX-määrittelyn mukaisen version verkko-ohjelmointiin.
Toiminnot
Pistoke (engl. socket) on rajapinnassa käytettävä tiedostokahva (engl. handle), jonka kautta tietoa vastaanotetaan ja lähetetään.[3]
Rajapintaa voidaan käyttää useiden protokollien kanssa kuten:[3]
- 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.[3][1] Muita ovat SOCK_RAW, SOCK_RDM ja SOCK_SEQPACKET.[2] Rajapintaa voidaan käyttää sekä yhteydellisille että yhteydettömille tavoille.[13]
Keskeiset järjestelmäkutsut rajapinnassa ovat:[5]
socket
close
connect
bind
listen
accept
Tiedonsiirto toimii kuten tiedostojen kanssa: rajapinnan avulla luetaan ja kirjoitetaan tietoa käyttäen järjestelmäkutsupareja:[2]
read, write
recv, send
recvfrom, sendto
recvmsg, sendmsg
readv, writev
Rajapinta antaa onnistumisen merkin kun tieto on hyväksytty siirrettäväksi.[2] Rajapinnan toiminta voidaan asettaa ei-pysäyttäväksi (engl. non-blocking), jolloin funktiokutsut eivät jää odottamaan.[3]
Rajapinnan ja kommunikoinnin toimintaa voidaan muuttaa muun muassa getsockopt
ja setsockopt
järjestelmäkutsujen avulla.[14][15]
Lähteet
Kirjallisuutta
- Stevens, W. Richard: UNIX Network Programming. Prentice Hall. ISBN 978-0139498763.
Aiheesta muualla
- Beej's Guide to Network Programming (englanniksi)