next up previous contents
Next: Példák a socket Up: A socketokkal kapcsolatos Previous: UDP broadcast lehetoség

Socket aszinkron üzemmódra állítása

Az accept(), connect() és write() rendszerhívásoknak esetenként várniuk kell, amíg valamekkora memória felszabadul. Ez azt jelenti, hogy ha egy folyamat a fenti rendszerhívások közül végrehajt egyet, és épp nincs elég szabad memória (egy speciálisan erre a célra kijelölt kernel-területen), akkor a folyamat nem fut tovább, amíg a szükséges mennyiségu memória fel nem szabadul. Ezt meg lehet kerülni a következo példában bemutatott rendszerhívással:

     #include <fcntl.h>

     ..

     sd=socket( ... );

     ..

     if (fcntl(sd,F_SETFL,FNDELAY) < 0) {
          perror("hiba az fcntl-nel");
          exit(1);
    }

Ezután a fent említett rendszerhívások közül az accept() és a connect() negatív (vagyis hibát jelzo) visszatérési értékkel tér vissza, és az errno változóba EWOULDBLOCK hibakód kerül, ha a rendszerhívás végrehajtásához a rendszernek várnia kellene. Ekkor a rendszerhívás nem hajtódik végre. Az adatküldo (pl. write() és send()) rendszerhívások (amelyek visszatérési értékként az elküldött adatbyteok számát adják vissza) ha nincs elég memória, akkor (esetleg) kevesebb byteot küldenek el, és ezt adják vissza.



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