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
muokkaaPistoke (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
muokkaa- ↑ a b Jim Frost: BSD Sockets: A Quick And Dirty Primer cis.temple.edu. Viitattu 29.3.2018.
- ↑ a b c d Lawrence Besaw: Berkeley UNIX System Calls and Interprocess Communication (PS) gaia.cs.umass.edu. tammikuu 1987. Viitattu 29.3.2018.
- ↑ a b c d e SOCKET(2) man7.org. Viitattu 29.3.2018.
- ↑ socket The Open Group. Viitattu 29.3.2018.
- ↑ a b Giovanni Agosta: The POSIX Socket API (PDF) home.deib.polimi.it. Viitattu 29.3.2018.
- ↑ James Pelkey: TCP/IP and XNS 1981 – 1983 historyofcomputercommunications.info. Arkistoitu 17.6.2018. Viitattu 6.6.2018. (englanniksi)
- ↑ Warren Young: Winsock Programmer’s FAQ Articles: BSD Sockets Compatibility tangentsoft.net. Viitattu 29.3.2018.
- ↑ Porting Socket Applications to Winsock Microsoft. Viitattu 29.3.2018.
- ↑ Windows Sockets sockets.com. 20.1.1993. Viitattu 29.3.2018.
- ↑ Macintosh Development web.mit.edu. Viitattu 29.3.2018.
- ↑ Using Sockets and Socket Streams Apple. Viitattu 29.3.2018.
- ↑ Understanding the X/Open Transport Interface (XTI) IBM. Viitattu 29.3.2018.
- ↑ socket freebsd.org. Viitattu 30.3.2018.
- ↑ GETSOCKOPT(2) man7.org. Viitattu 30.3.2018.
- ↑ GETSOCKOPT(2) freebsd.org. Viitattu 30.3.2018.
Kirjallisuutta
muokkaa- Stevens, W. Richard: UNIX Network Programming. Prentice Hall. ISBN 978-0139498763
Aiheesta muualla
muokkaa- Beej's Guide to Network Programming (englanniksi)