次の表は、XTI/TLI 関連のすべての状態遷移を説明します。
次の表に、XTI/TLI の状態遷移で使用される状態とサービスタイプを定義します。
表 9–1 XTI/TLI 状態遷移とサービスタイプ
状態 |
説明 |
サービスタイプ |
---|---|---|
T_UNINIT |
初期化が行われていない - インタフェースの初期状態と終了状態 |
T_COTS、T_COTS_ORD、T_CLTS |
T_UNBND |
初期化されているが、バインドされていない |
T_COTS、T_COTS_ORD、T_CLTS |
T_IDLE |
コネクションが確立されていない |
T_COTS、T_COTS_ORD、T_CLTS |
T_OUTCON |
クライアントに対する送信コネクションが保留中 |
T_COTS、T_COTS_ORD |
T_INCON |
サーバーに対する受信コネクションが保留中 |
T_COTS、T_COTS_ORD |
T_DATAXFER |
データ転送 |
T_COTS、T_COTS_ORD |
T_OUTREL |
送信正常型解放 (正常型解放要求待ち) |
T_COTS_ORD |
T_INREL |
受信正常型解放 (正常型解放要求の送信待ち) |
T_COTS_ORD |
次の表に示す送信イベントは、指定されたトランスポートルーチンから返される状態に対応しており、このようなイベントにおいて、これらのルーチンはトランスポートプロバイダに要求または応答を送信します。この表で示すイベントの一部 (accept など) は、発生した時点におけるコンテキストによって意味が変わります。これらのコンテキストは、次の変数の値に基づきます。
ocnt – 未処理のコネクション要求の数
fd – 現在のトランスポート終端のファイル記述子
resfd – コネクションが受け入れられるトランスポート終端のファイル記述子
イベント |
説明 |
サービスタイプ |
---|---|---|
opened |
t_open(3NSL) が正常に終了した |
T_COTS、T_COTS_ORD、T_CLTS |
bind |
t_bind(3NSL) が正常に終了した |
T_COTS、T_COTS_ORD、T_CLTS |
t_optmgmt(3NSL) が正常に終了した |
T_COTS、T_COTS_ORD、T_CLTS |
|
unbind |
t_unbind(3NSL) が正常に終了した |
T_COTS、T_COTS_ORD、T_CLTS |
closed |
t_close(3NSL) が正常に終了した |
T_COTS、T_COTS_ORD、T_CLT |
connect1 |
同期モードの t_connect(3NSL) が正常に終了した |
T_COTS、T_COTS_ORD |
connect2 |
非同期モードの t_connect(3NSL) で TNODATA エラーが発生したか、あるいは、切断要求がトランスポート終端に着信したことにより TLOOK エラーが発生した |
T_COTS、T_COTS_ORD |
accept1 |
ocnt == 1、fd == resfd を指定した t_accept(3NSL) が正常に終了した |
T_COTS、T_COTS_ORD |
accept2 |
ocnt == 1、fd != resfd を指定した t_accept(3NSL) が正常に終了した |
T_COTS、T_COTS_ORD |
accept3 |
ocnt > 1 を指定した t_accept(3NSL) が正常に終了した |
T_COTS、T_COTS_ORD |
snd |
t_snd(3NSL) が正常に終了した |
T_COTS、T_COTS_ORD |
snddis1 |
ocnt <= 1 を指定した t_snddis(3NSL) が正常に終了した |
T_COTS、T_COTS_ORD |
snddis2 |
ocnt > 1 を指定した t_snddis(3NSL) が正常に終了した |
T_COTS、T_COTS_ORD |
sndrel |
t_sndrel(3NSL) が正常に終了した |
T_COTS_ORD |
sndudata |
t_sndudata(3NSL) が正常に終了した |
T_CLTS |
受信イベントは、指定されたルーチンが正常に終了したときに発生します。これらのルーチンは、トランスポートプロバイダからのデータやイベント情報を返します。ルーチンから返された値に直接関連付けられていない唯一の受信イベントは pass_conn であり、このイベントはコネクションが他の終端に移行するときに発生します。終端で XTI/TLI ルーチンを呼び出さなくても、コネクションを渡している終端ではこのイベントが発生します。
次の表では、rcvdis イベントは、終端上の未処理のコネクション要求の数を示す ocnt の値によって区別されます。
表 9–3 受信イベント
イベント |
説明 |
サービスタイプ |
---|---|---|
listen |
t_listen(3NSL) が正常に終了した |
T_COTS、T_COTS_ORD |
rcvconnect |
t_rcvconnect(3NSL) が正常に終了した |
T_COTS、T_COTS_ORD |
rcv |
t_rcv(3NSL) が正常に終了した |
T_COTS、T_COTS_ORD |
rcvdis1 |
onct <= 0 を指定した t_rcvdis(3NSL) が正常に終了した() |
T_COTS、T_COTS_ORD |
rcvdis2 |
ocnt == 1 を指定した t_rcvdis(3NSL) が正常に終了した |
T_COTS、T_COTS_ORD |
rcvdis3 |
ocnt > 1 を指定した t_rcvdis(3NSL) が正常に終了した |
T_COTS、T_COTS_ORD |
rcvrel |
t_rcvrel(3NSL) が正常に終了した |
T_COTS_ORD |
rcvudata |
t_rcvudata(3NSL) が正常に終了した |
T_CLTS |
rcvuderr |
t_rcvuderr(3NSL) が正常に終了した |
T_CLTS |
pass_conn |
渡されたコネクションを受信した |
T_COTS、T_COTS_ORD |
状態テーブルは、XTI/TLI の状態遷移を示します。状態テーブルの列には現在の状態を、行には現在のイベントを、行と列の交差する部分では次に発生する状態を示しています。次に発生する状態が空の場合は、状態とイベントの組み合わせが無効であることを意味します。また次に発生する状態には、動作一覧が示されている場合もあります。動作は、指定された順序で実行する必要があります。
状態テーブルを見る場合は、次の点を理解してください。
t_close(3NSL) はコネクション型トランスポートプロバイダ用に確立されたコネクションを終了します。コネクションの終了が正常型または放棄型のどちらで行われるかは、トランスポートプロバイダがサポートするサービスタイプによって決まります。詳細は、t_getinfo(3NSL) のマニュアルページを参照してください。
トランスポートユーザーがシーケンス外のインタフェース呼び出しを発行すると、そのインタフェースは失敗し、t_errno は TOUTSTATE に設定されます。この状態は変更できません。
t_connect(3NSL) のあとにエラーコード TLOOK または TNODATA が返されると、状態が変化する可能性があります。次の状態テーブルでは、XTI/TLI を正しく使用していることを前提としています。
インタフェースのマニュアルページに特に指定されていない限り、他のトランスポートエラーによって状態が変化することはありません。
サポートインタフェース t_getinfo(3NSL)、t_getstate(3NSL)、t_alloc(3NSL)、t_free(3NSL)、t_sync(3NSL)、t_look(3NSL)、および t_error(3NSL) は状態に影響しないため、この状態テーブルから除外されています。
次の表の状態遷移には、トランスポートユーザーが行う必要がある動作が記載されているものもあります。各動作は、次のリストから求められた数字によって表現されます。
未処理のコネクション要求の数に 0 を設定する
未処理のコネクション要求の数を 1 だけ増やす
未処理のコネクション要求の数を 1 だけ減らす
別のトランスポート終端にコネクションを渡す (t_accept(3NSL) のマニュアルページを参照)
次の表に、終端の確立の状態を示します。
表 9–4 コネクション確立時における状態
イベント/状態 |
T_UNINIT |
T_UNBND |
T_IDLE |
---|---|---|---|
opened |
T_UNBND |
|
|
bind |
|
T_IDLE[1] |
|
|
|
T_IDLE |
|
unbind |
|
|
T_UNBND |
closed |
|
T_UNINIT |
|
次の表に、コネクションモードにおけるデータの転送の状態を示します。
表 9–5 コネクションモードにおける状態: その 1
イベント/状態 |
T_IDLE |
T_OUTCON |
T_INCON |
T_DATAXFER |
---|---|---|---|---|
connect1 |
T_DATAXFER |
|
|
|
connect2 |
T_OUTCON |
|
|
|
rcvconnect |
|
T_DATAXFER |
|
|
listen |
T_INCON [2] |
|
T_INCON [2] |
|
accept1 |
|
|
T_DATAXFER [3] |
|
accept2 |
|
|
T_IDLE [3] [4] |
|
accept3 |
|
|
T_INCON [3] [4] |
|
snd |
|
|
|
T_DATAXFER |
rcv |
|
|
|
T_DATAXFER |
snddis1 |
|
T_IDLE |
T_IDLE [3] |
T_IDLE |
snddis2 |
|
|
T_INCON [3] |
|
rcvdis1 |
|
T_IDLE |
|
T_IDLE |
rcvdis2 |
|
|
T_IDLE [3] |
|
rcvdis3 |
|
|
T_INCON [3] |
|
sndrel |
|
|
|
T_OUTREL |
rcvrel |
|
|
|
T_INREL |
pass_conn |
T_DATAXFER |
|
|
|
T_IDLE |
T_OUTCON |
T_INCON |
T_DATAXFER |
|
closed |
T_UNINIT |
T_UNINIT |
T_UNINIT |
T_UNINIT |
次の表に、コネクションモードにおけるコネクションの確立、コネクションの解放、およびデータの転送の状態を示します。
表 9–6 コネクションモードにおける状態: その 2
イベント/状態 |
T_OUTREL |
T_INREL |
T_UNBND |
---|---|---|---|
connect1 |
|
|
|
connect2 |
|
|
|
rcvconnect |
|
|
|
listen |
|
|
|
accept1 |
|
|
|
accept2 |
|
|
|
accept3 |
|
|
|
snd |
|
T_INREL |
|
rcv |
T_OUTREL |
|
|
snddis1 |
T_IDLE |
T_IDLE |
|
snddis2 |
|
|
|
rcvdis1 |
T_IDLE |
T_IDLE |
|
rcvdis2 |
|
|
|
rcvdis3 |
|
|
|
sndrel |
|
T_IDLE |
|
rcvrel |
T_IDLE |
|
|
pass_conn |
|
| |
optmgmt |
T_OUTREL |
T_INREL |
T_UNBND |
closed |
T_UNINIT |
T_UNINIT |
|
次の表に、コネクションレスモードにおける状態を示します。
表 9–7 コネクションレスモードにおける状態
イベント/状態 |
T_IDLE |
---|---|
snudata |
T_IDLE |
rcvdata |
T_IDLE |
rcvuderr |
T_IDLE |