next up previous contents
Next: Kapcsolat nem rendezett Up: A Transport Layer Previous: Adatátviteli hibák összeköttetés-mentes

Kapcsolat rendezett lebontása

Már volt róla szó, hogy a TLI kétféle lehetoséget nyújt a kapcsolat (összeköttetés - itt errol van szó) lebontására: rendezett vagy rendezetlen (abortív) lebontásra van lehetoség. Az abortoív lebontás nem garantálja azt, hogy a már elküldött, de a címzetthez még nem kézbesített adatok valamikor is el lesznek juttatva a címzetthez - a rendezett lebontás ezt garantálja. A rendezett lebontáshoz a következo eljárásokat lehet felhasználni:

     t_sndrel(tfd);

illetve

     t_rcvrel(tfd);

Hogyan is történik a rendezett lebontás? Az összeköttetés általában kétirányú: mindkét kommunikáló fél küldhet adatokat a másiknak. Amikor az egyik fél úgy dönt, hogy nem küld több adatot a másiknak, akkor meg kell hívnia a t_sndrel() TLI függvényt. A másik félnél ekkor a további adatokra várakozó t_rcv() TLI függvény hibával tér vissza (visszatérési értéke -1 lesz) és a t_errno változó a TLOOK konstans értéket fogja tartalmazni. Az TLI könyvtár belso állapotként a T_ORDREL értéket fogja tartalmazni, amit a -- késobb bemutatandó -- t_look() TLI függvénnyel lehet lekérdezni - erre nézzük meg a következo példát (vagyis a t_rcv() milyen környezetben szokott elofordulni):

     while (t_rcv(tfd, ...) != (-1)) {
          /*
           * Adat erkezett, dolgozzuk fel ...
           */
     }
     if ((t_errno == TLOOK) && (t_look(tfd) == T_ORDREL)) {
          t_rcvrel(tfd); /* Vettuk a lebontasi kerelmet */
          t_sndrel(tfd); /* Elkuldjuk a mi lebontasi kerelmunket is */
     } else {
          t_error("Hiba a t_rcv() hivasnal!");
     }

Látható, hogy a kommunikációs partner a kapcsolat lebontását a t_rcvrel() függvény meghívásával fogadja el. Ennek a rutinnak a meghívása természetesen "kötelezo".



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