Tämän päivän artikkelissa perehdymme Berkeley sockets:n kiehtovaan maailmaan. Aiheen alkuperästä sen nykypäivän merkitykseen tutkimme tämän aiheen kaikkia näkökohtia tavoitteenaan tarjota täydellinen ja tyhjentävä analyysi. Löydämme sen monipuoliset puolet, sen vaikutukset eri alueilla ja sen mahdolliset tulevaisuuden ennusteet. Holistisen näkemyksen kautta lähestymme Berkeley sockets:tä eri näkökulmista tarjotaksemme lukijalle syvemmän ja rikastuttavan ymmärryksen. Sillä ei ole väliä, oletko aiheen asiantuntija vai oletko vain satunnainen kiinnostus. Tästä artikkelista löydät arvokasta tietoa, joka kutsuu sinut pohtimaan ja sukeltamaan syvemmälle Berkeley sockets:n jännittävään maailmaan.
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]
Microsoft Windows -käyttöjärjestelmän Windows Sockets -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.
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]