next up previous contents
Next: Adatátvitel összeköttetés-alapú kapcsolatok Up: A Berkeley socketok Previous: Socket címének kijelölése

Kapcsolat létrehozása

Erre az összeköttetés-alapú klienseknél és szervereknél van szükség. A kapcsolatfelvétel a szerver részérol úgy történik, hogy a szerver a socketján végrehajtja a listen() rendszerhívást, és ezzel bejelenti az operációs rendszernek, hogy a socketja kész a kliensek rákapcsolódási kérelmeinek fogadására. Az elso paraméter itt is a socket-descriptor, míg a második paraméter egy egész szám, és azt mondja meg, hogy ha egyszerre több kliens is rá akarna kapcsolódni a szerver socketra, akkor hány rákapcsolódási kérelmet rakjon bele egy várakozási sorba (a többit "eldobja", visszautasítja). Ennek értéke általában (alapértelmezés szerint) 5. Ezután a szerver az accept() rendszerhívással vehet le a fenti várakozási sorból (ciklusban ...) egy-egy kérelmet és kapcsolódhat a klienshez. (Ha nincs ilyen kérelem, akkor a rendszerhívás vár, amíg lesz egy.) Az accept rendszerhívás elso paramétere egy socket-descriptor, második ill. harmadik paramétere pedig egy socket-cím struktúra (cím szerint átadva ...) ill. egy cím-hosszat tartalmazó egész számra mutató pointer, ahova a távoli kommunikációs partner címének a hosszát adja vissza a rendszer. A második paraméterben megadott címre visszatéréskor a rákapcsolt kliens címét írja vissza. A rendszerhívás visszatérési értéke egy új socket-descriptor, amivel a kapcsolatra hivatkozni lehet.

A kapcsolat létrehozása a klienseknél a connect() rendszerhívással zajlik. Ennek elso paramétere a socket-descriptor, amin keresztül rá akarunk valahova kapcsolódni. Második paraméter egy socket-cím struktúra, ami a szerver címét tartalmazza. Harmadik paramétere pedig az elobbi struktúra hosszát adja meg. Visszatérési értéke -1, ha a rendszerhívás sikertelen volt.

A rendszerhívások alakja tehát a következo:

          listen(sd, nrofreq);

          newsd=accept(sd, name, namelength);

          connect(sd, name, namelength);

Ezután megkezdodhet az adatátvitel.



Csizmazia Balazs
Tue Apr 2 00:06:27 MET DST 1996