Berkeley Sockets - az

Berkeley socket API alakított de facto szabvánnyá absztrakció hálózati aljzatra. A legtöbb más programozási nyelvek segítségével felület hasonló a C nyelvhez API.

API Transport Layer Interface (TLI), alapuló STREAMS, alternatívát jelent a socket API. Azonban API foglalatok Berkeley túlsúlyban népszerűsége száma és a megvalósítások.

Berkeley socket felületen

Berkeley socket interfész - API. amely lehetővé teszi a megvalósítása közötti kölcsönhatás számítógépek vagy a folyamatok közötti ugyanazon a számítógépen. Ez a munka sok különböző típusú I / O eszközök és a járművezetők. annak ellenére, hogy a támogatást végrehajtásától függ az operációs rendszer. Egy ilyen felület végrehajtás alapján TCP / IP. így ez az egyik alapvető technológia, amely az internet alapját. socket technológiát először fejlesztette ki a University of California, Berkeley használatra Unix rendszereken. Minden modern operációs rendszer van egy különös végrehajtását a felület Berkeley socket, mivel vált egy szabványos interfészt, és kapcsolódik az internethez.

A programozók elérheti az interfész aljzat három különböző szinten, a legerősebb és alapvető amelynek szintje nyers aljzatok. Jó néhány alkalmazás kell korlátozni felett kimenő kapcsolatok által végrehajtott őket, ezért támogatja a nyers aljzatok gondolják, hogy csak azokon a számítógépeken, hogy a használt fejlődés alapján kapcsolódó technológiák az interneten. Ezt követően, a legtöbb operációs rendszer azt végrehajtották a támogatást, beleértve a Windows XP.

header fájlok

Szoftver könyvtár Berkeley socket sokaságát tartalmazza kapcsolódó header fájlokat. Köztük:

socket () kapcsolatot teremt a végpontra, és visszaadja a fogantyút. socket () három paramétert fogad:

  • domént. család protokollokat jelző létrehozott aljzatba. Például:
    • Set_optmin Hálózati protokoll IPv4 vagy
    • PF_INET6 IPv6.
    • PF_UNIX helyi aljzatok (a fájl).
  • (Type) egyik:
    • SOCK_STREAM (megbízható adatfolyam-orientált szolgáltatás (service), vagy egy patak aljzat)
    • SOCK_DGRAM (datagram szolgáltatás vagy datagram socket)
    • SOCK_SEQPACKET (megbízható szolgáltatást egymást követő csomagok), vagy
    • SOCK_RAW (nyers socket - nyers protokollt a hálózati réteg).
  • protokoll határozza meg az átviteli protokollt. A leggyakoribb - ez IPPROTO_TCP. IPPROTO_SCTP. IPPROTO_UDP. IPPROTO_DCCP. Ezek a protokollok vannak meghatározva . A „0” értéket lehet használni, hogy válassza ki az alapértelmezett protokoll az említett család (domain) és a típus (típus).

A függvény -1, ha hiba történt. Különben visszaküldi értéke képviselő rendelt leíró.

gethostbyname () és a gethostbyaddr ()

Funkciók vissza NULL mutató a hiba esetén. Ebben az esetben azt lehet ellenőrizni több teljes h_errno azonosítani hibák vagy hibás vagy unknown host. Különben visszaküldi a helyes struct hostent *.

csatlakoztassa () értéke egész szám, ami a hibakód: 0 azt jelenti, siker, és -1 hibát jelez.

Leterheltet elutasíthatja a csatlakozási kísérletet, így néhány fajta programokat kell biztosítani az ismételt csatlakozási kísérleteket.

Return 0 siker vagy -1, ha hiba történik.

hallgatni () készít kötött aljzat fogadja a bejövő kapcsolatokat. Ez a funkció csak típusra alkalmazandó SOCK_STREAM és SOCK_SEQPACKET aljzatok. Ez két paramétert fogad:

  • sockfd - megfelelő aljzathoz leíró.
  • elmaradás - egy egész, számának feltüntetésével megalapozott kapcsolatokat lehet kezelni az adott pillanatban. Az operációs rendszer általában határozza meg, hogy egyenlő a maximális értéket.

Elfogadása után a kapcsolat jelenik meg a sorban. Ha sikeres, értéke 0, ha hiba történik, -1 vissza.

elfogadja () készítésére használják a csatlakozási kérelmet egy távoli gépen. Tart a következő érveket:

A függvény egy socket leíró társított elfogadott kapcsolatára, vagy -1, ha hiba történik.

További lehetőségek a foglalat

Akkor további opciók neki létrehozása után az aljzat. Íme néhány közülük:

  • TCP_NODELAY letiltja Nagle algoritmus (Engl. Nagle's_algorithm)
  • SO_KEEPALIVE tartalmazza az időszakos ellenőrzések „életjelet”, ha támogatja az operációs rendszer.

Blokkolása és nem blokkoló foglalatok

Berkeley socket működhet kétféle módja van: blokkoló, vagy nem blokkoló. Blokkoló socket nem tér vissza, amíg kontroll küld (vagy nem kap) megadott adatok a műveletet. Ez csak akkor igaz, Linux-alapú rendszerek. Más rendszerek, mint például a FreeBSD, ez teljesen természetes a zár foglalat küldeni az összes adatot. A kérelemnek tartalmaznia kell ellenőrizni a visszatérési érték nyomon követheti, hogy hány bájt került küldött / fogadott, és ennek megfelelően újraküldi a nyers aktív pontinformációnak [1]. Ez problémákhoz vezethet, ha a foglalat még mindig „hallgat”: a program lefagy annak a ténynek köszönhető, hogy a foglalat adatokra vár, hogy talán soha nem jön.

A foglalat általában jelzi egy blokkoló vagy nem-blokkoló használatával fcntl () vagy ioctl ().

adatátvitel

Az adatátvitel, akkor a szokásos olvasási / írási, olvasási és írási fájlok funkciókat. de van egy különleges funkció adatátvitel aljzatok:

Szükséges megjegyezni, hogy ha a TCP (foglalat típusa SOCK_STREAM) valószínűleg kapnak kevesebb adatot tartalmaz, mint átkerült, mivel nem minden adat átkerült, így akkor vagy várni a funkció recv visszatér 0 bájt, vagy tegye MSG_WAITALL zászló recv funkciót. , amitől várni az adás vége. Más típusú aljzatok zászló nem változik semmi MSG_WAITALL (pl UDP egész csomag = teljes üzenet). Lásd még a „blokkolása és a nem-blokkoló foglalatok.”

felszabadító erőforrások

A rendszer nem engedi el a forrásokat a hívás socket (). amíg a close () hívást. Ez különösen fontos, ha a connect () ment rosszul, és meg lehet ismételni. Minden hívás socket () kell egy megfelelő hívás zárja () az összes lehetséges végrehajtási utakat. Meg kell adnia egy header file hogy támogassa a záró funkciót.

Az eredmény a rendszer hívás close () az egyetlen kezelés a felület lezárása a csatlakozó, nem bezárását az aljzatba. Ez a csapat a mag, hogy lezárja az aljzatba. Néha a szerver oldalon konnektor készenléti módba TIME_WAIT 4 percre. [2]

Egy példa a kliens és a szerver TCP

TCP végrehajtja a koncepció kapcsolatokat. A folyamat létrehoz egy TCP-socket hívja a socket () függvény PF INET vagy PF_INET6 paramétereket. és SOCK_STREAM (stream aljzat) és IPPROTO_TCP.

Létrehozása egyszerű TCP-alapú szerver az alábbi lépéseket:

  • Létrehozása TCP-socket hívás socket () függvényt.
  • Binding a socket kapun figyeljen hívja bind (). Mielőtt hívja bind () a programozó kell állapítsa a szerkezet sockaddr_in. tisztítsa meg (segítségével memset ()), akkor sin_family (set_optmin vagy PF_INET6), és töltse ki a sin_port (figyelt port, hogy jelezze a bájtok sorozata). Conversion rövid int bájtsorrend is készült htons () függvényhívás (rövidítése: „a gazdától a hálózat”).
  • Előkészítése az aljzat figyelni kell a kapcsolatokat (hozzon létre egy hallgatási aljzat) segítségével hallgatni () hívást.
  • Elfogadása bejövő kapcsolatok révén hívásfogadás (). Ez blokkolja a foglalat a beérkező kapcsolatot, majd visszatér a foglalat fogantyú a fogadott kapcsolatot. Az eredeti leíró maradványait hallgatja a fogantyút, és fogadja el () újra hívható erre socket bármikor (mindaddig, amíg le van zárva).
  • Csatlakozás a távoli gépre, amely lehet létrehozni a send () és a recv () vagy write () és read ().
  • A végleges lezárása minden nyitott socket már nincs szükség, akkor történik close (). Meg kell jegyezni, hogy ha volt olyan hívások fork (). Minden folyamatot kell bezárni ismert aljzatok (kernel nyilvántartja az eljárások száma, amelyek megnyitották a fogantyút), és emellett a két folyamat nem kell ugyanazt a socket ugyanabban az időben.

Létrehozása TCP-kliens a következő:

Példa kliens és a szerver segítségével UDP

A kód lehet létrehozni egy UDP-kiszolgáló port 7654 a következő:

Ez végtelen ciklus lesz az összes UDP-datagrammokat érkező kikötőben 7654 segítségével recvfrom (). A függvény paraméterei:

Beállítása Normál „de jure” socket felületen szereplő POSIX szabvány. ismertebb nevén:

Nézze meg, mi a „Berkeley Sockets” más szótárak:

Socket (Programming Interface) - Ez a kifejezés, vannak más célra, lásd aljzat .. Aljzatok (Eng. A foglalat horony, rés, socket) a neve a szoftver interfész közötti adatcserére folyamatok. Folyamatok ilyen csere lehet végrehajtani, mint ... ... Wikipedia

Programozása hálózati feladatok - A területen a számítógépes koncepció hálózat programozási feladatot, vagy más néven hálózati programozás (angol hálózati programozás.), Nagyon hasonló a fogalmak a programozás aljzatok és kliens-szerver programozás, ... ... Wikipedia

Unix domain socket - (robbanás socket Unix) vagy a socket IPC (kommunikációs socket) végpont adatok cseréjét, hasonlóan az Internet csatlakozó, de nem egy hálózati protokoll kommunikáció (adatcsere). Ezt alkalmazzák az operációs rendszer, ... ... Wikipedia

Nyers aljzat - Application Programming Interface (API), a különböző Berkeley socket, amely lehetővé teszi, hogy összegyűjti a TCP / IP-csomagok, kontrolling minden bit a fejléc és elküldi a hálózat nem szabványos csomagolásban. Példa létrehozása aljzatba. C nyelv kódot. int i32SocketFD ... Wikipedia

UNIX - Family Tree UNIX UNIX (értsd Unix) családja hordozható, többfeladatos és többfelhasználós ... Wikipedia

UX - Family Tree UNIX UNIX (értsd Unix) csoport hordozható, többfeladatos és többfelhasználós operációs rendszer. Az első UNIX alakult 1969-ben a szétválás a Bell Labs AT T. mivel jött létre ... Wikipedia

Unix - Family Tree UNIX UNIX (értsd Unix) csoport hordozható, többfeladatos és többfelhasználós operációs rendszer. Az első UNIX alakult 1969-ben a szétválás a Bell Labs AT T. mivel jött létre ... Wikipedia

UNIX - Family Tree UNIX UNIX (értsd Unix) csoport hordozható, többfeladatos és többfelhasználós operációs rendszer. Az első UNIX alakult 1969-ben a szétválás a Bell Labs AT T. mivel jött létre ... Wikipedia

Unix - Family Tree UNIX UNIX (értsd Unix) csoport hordozható, többfeladatos és többfelhasználós operációs rendszer. Az első UNIX alakult 1969-ben a szétválás a Bell Labs AT T. mivel jött létre ... Wikipedia

Transport Layer Interface - A tervezés számítógépes hálózatok Transport Layer Interface (. Angol Transport Layer Interface) (TLI) már egy hálózati API támogatott AT T UNIX System V Release 3 (SVR3) és a Release 4 (SVR4). TLI egy kettős (de System V) ... ... Wikipedia