以下の表に、XTI/TLI 関連のすべての状態遷移を示します。最初に、状態とイベントについて説明します。
表 3-8 に、XTI/TLI の状態遷移で経過する状態およびサービスタイプを定義します。
表 3-8 XTI/TLI 状態遷移とサービスタイプ
状態 |
説明 |
サービスタイプ |
---|---|---|
T_UNINIT |
初期化未完 - インタフェースの初期状態と終了状態 |
|
T_UNBND |
初期化されているが、バインドされていない |
|
T_IDLE |
接続が確立していない |
|
T_OUTCON |
クライアントに対する送信接続が保留中 |
|
T_INCON |
サーバーに対する受信接続が保留中 |
|
T_DATAXFER |
データ転送 |
|
T_OUTREL |
送信正常型解放 (正常型解放要求待ち) |
|
T_INREL |
受信正常型解放 (正常型解放要求の送信待ち) |
|
表 3-9 に記載する送信イベントは、指定のトランスポートルーチンがトランスポートプロバイダに要求または応答を送信したときに返される状態に対応しています。「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 ルーチンを呼び出さなくても、接続を渡しているエンドポイントではこのイベントが発生します。
表 3-10 に示す rcvdis イベントは、それぞれ ocnt の値が異なります。ocnt とは、エンドポイントでの未処理接続要求の数です。
表 3-10 受信イベント
イベント |
接続 |
サービスタイプ |
---|---|---|
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 |
onct == 1 で t_rcvdis(3NSL) が正常に終了した |
|
rcvdis3 |
onct > 1 で t_rcvdis(3NSL) が正常に終了した |
|
rcvrel |
正常に t_rcvrel(3NSL) が終了した |
|
rcvudata |
正常に t_rcvudata(3NSL) が終了した |
|
rcvuderr |
正常に t_rcvuderr(3NSL) が終了した |
|
pass_conn |
渡された接続を受け取った |
|
次に示す一部の状態遷移は、トランスポートユーザーが行うべき動作の一覧を示しています。各動作は、次の一覧に示す値で表現します。
未処理の接続要求のカウントにゼロを設定する。
未処理の接続要求のカウントを 1 だけ増やす。
未処理の接続要求のカウントを 1 だけ減らす。
t_accept(3NSL) で示されるように、別のトランスポートエンドポイントに接続を移す。
状態テーブルは、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) といったサポート関数は、状態に影響しないので、この状態テーブルから除外されています。
表 3-11、表 3-12、表 3-13 および表 3-14 では、エンドポイントの確立、コネクションレスモードでのデータの転送、コネクションモードでの接続確立/接続解放/データ転送を示します。
表 3-11 接続確立時における状態
イベント/状態 |
T_UNINIT |
T_UNBND |
T_IDLE |
---|---|---|---|
opened |
T_UNBND |
|
|
bind |
|
T_IDLE[1] |
|
|
|
T_IDLE |
|
unbind |
|
|
T_UNBND |
closed |
|
T_UNINIT |
|
表 3-12 コネクションモードにおける状態 - その 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 |
表 3-13 コネクションモードにおける状態 - その 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 |
|
表 3-14 コネクションレスモードにおける状態
イベント/状態 |
T_IDLE |
---|---|
snudata |
T_IDLE |
rcvdata |
T_IDLE |
rcvuderr |
T_IDLE |