next up previous contents
Next: A kommunikációs partner Up: A Berkeley socketok Previous: Kapcsolat (socket) lezárása

Több socket párhuzamos figyelése (select)

A select rendszerhívással lehetoség van párhuzamosan több socket állapotának a figyelésére is (hogy érkezett-e rá adat vagy sem stb.). A rendszerhívás alakja:

     nrofsdsfound=select(nsds, readsds, writesds, exceptsds, tmout);

Az nsds paraméter megmondja, hogy a 0-tól nsds-1 -ig terjedo socket- (ill. fájl-)descriptorokat kell figyelnie a programnak. A readsds egy pointer, és azok a bitek vannak beállítva az általa mutatott helyen, amelyeket a 0..nsds-1 descriptor-intervallumból olyan szempontból kell figyelni, hogy adat érkezett rá valahonnan. A writesds ehhez hasonló, de a rendszer ennél azt figyeli, hogy kész van-e a socket adat küldésére. Az exceptsds hasonlóan adja meg, hogy mely descriptorokat kell figyelni "kivételes események" szempontjából (pl. sürgos adat érkezése). A tmout paraméter egy pointer, és ha NULL, akkor a rendszer addig vár, amíg valamely kívánt esemény bekövetkezik; egyébként pedig a pointer által mutatott címen levo tmout strukturában megadott másodperc ill. microsec. ideig vár valamely eseményre, és ha semmi sem történik addig, akkor TIMEOUT hibával tér vissza. Megjegyzeeük, hogy az, hogy egy socket kész az adatküldésre csak annyit jelent, hogy a rá vonatkozó write/send rendszerhívások végrehajtásukkor nem blokkolnak, és nem jelenti -- például egy esetleges hálózati hiba bekövetkezte után -- azt, hogy a hálózati kapcsolat már helyesen muködik, és az adat a kommunikációs kapcsolat egyik végérol a másikra átküldheto.

A C könyvtár szabványos makrokat bocsát a felhasználó rendelkezésére, amelyekkel a readsds/ writesds/ exceptsds mezoket a socket-descriptorok alapján könnyu kitölteni (ezeket a makrokat használjuk, mert lehet, hogy késobb a belso reprezentáció meg fog változni).

Ezzel a rendszerhívással lehet microsec. pontosságú órát a programba építeni.



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