Berkeley sockets

ohjelmointirajapinta (API) prosessien väliseen kommunikointiin

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]

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

Aiheesta muualla