next up previous contents
Next: Adatátvitel nem öszeköttetés-alapú Up: A Berkeley socketok Previous: Kapcsolat létrehozása

Adatátvitel összeköttetés-alapú kapcsolatok esetén

Az adatátvitel többféleképpen is mehet: mehet a read() ill. write() vagy a send() és recv() rendszerhívásokkal.

A write() rendszerhívás paraméterezése a következo:

     write(sd, buff, size);

Ez a buff bufferbol size darab byteot elküld az sd socket-descriptorhoz tartozó (hálózati vagy más) kapcsolatra.

A read() rendszerhívás paraméterezése a következo:

     read(sd, buff, size);

Ez a buff bufferbe size darab byteot beolvas az sd socket-descriptorhoz tartozó (hálózati vagy más) kapcsolatról.

Mindketto rendszerhívás visszatérési értéke hiba esetén -1, egyébként pedig az átvitt byteok mennyisége (vigyázni kell! lehet, hogy size-nél kisebb!). Ha a távoli gép a hálózati kapcsolatot lezárta, akkor a read rendszerhívás visszatérési értéke 0.

A send() rendszerhívás paraméterezése a következo:

     send(sd, buff, size, flags);

Ez a buff bufferbol size darab byteot elküld az sd socket-descriptorhoz tartozó (hálózati vagy más) kapcsolatra.

A recv() rendszerhívás paraméterezése a következo:

     recv(sd, buff, size, flags);

Ez a buff bufferbe size byteot beolvas az sd socket-descriptorhoz tartozó (hálózati vagy más) kapcsolatról.

A fenti két rendszerhívásnál ha a flags paraméter 0, akkor ugyanúgy viselkednek, mint a read illetve write rendszerhívások. Ezen kívül más értékekeit is felvehet, mint például az MSG_OOB-t, ami azt jelenti, hogy a protokoll által definiált sürgos adatként kell az elküldött byteokat kezelni. Másik speciális flag az MSG_PEEK, amely a recv rendszerhívásnál adható át, és az eredménye az, hogy az adatokat bemásolja a rendszer a megadott bufferbe, de az eredeti helyükön is meghagyja. Mindegyik rendszerhívás az átvitt (beolvasott ill. kiírt) adatbyteok számát adja vissza.



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