CUPは会話型サービスとのコネクションを確立します。コネクションを確立する場合は,tpconnect関数を呼び出します。tpconnect関数でコネクションを確立したUAPプロセスをオリジネータ,相手のUAPプロセスをサブオーディネータと呼びます。
tpconnect関数が正常終了した場合には,確立したコネクションを識別する記述子が返されます。この記述子を,通信する関数に設定して通信します。
会話型サービスでtpreturn関数を呼び出して処理を終了すると,コネクションは切断されます。
tpconnect関数では,引数flagsに,制御権を持つかどうかを設定します。制御権ありで設定したプロセスは,tpsend関数を呼び出し,データを送信できます。制御権なしで設定すると,通信相手のプロセスに制御権が渡され,tpconnect関数を呼び出したプロセスはtprecv関数を呼び出し,データを受信できます。
データを送信するときは,tpsend関数を呼び出します。tpsend関数を呼び出す場合は,引数には,tpconnect関数で返された記述子を設定して,使用するコネクションを特定します。
tpsend関数は,コネクションの制御権を持つ側だけが発行できます。制御権を持たない側がtpsend関数を呼び出した場合,tpsend関数はエラーリターンします。
コネクションの制御権を通信相手のプロセスに渡したい場合は,tpsend関数の引数で設定します。
データを受信するときは,tprecv関数を呼び出します。データは非同期に受信します。tprecv関数はコネクションの制御権を持たないプロセスだけ発行できます。
引数の設定によっては,tprecv関数はデータを受信するまで待ちます。
tprecv関数を呼び出したプロセスがトランザクション下にある場合,最大応答待ち時間は,クライアント環境定義DCCLTTREXPTMまたはクライアントサービス定義trn_expiration_timeで指定した値となります。この場合,最大応答待ち時間を超えると,CUP実行プロセスは異常終了します。ただし,tprecv関数はエラーリターンしません。
tprecv関数を呼び出したプロセスがトランザクション下にない場合,最大応答待ち時間は,クライアントサービス定義のwatch_timeで指定した値となります。この場合,最大応答待ち時間を超えると,tprecv関数はエラーリターンします。
会話型サービスの処理が終了してtpreturn関数を呼び出すと,コネクションは正常に切断されます。また,通信中にエラーが発生した場合,コネクションが切断されることがあります。
何らかの理由でコネクションを強制的に切断する場合は,tpdiscon関数を呼び出します。tpdiscon関数に設定された記述子は,それ以降の処理では無効になります。トランザクションはロールバックされます。
XATMIインタフェースを使用して通信を行うCUPで,CUPからトランザクションを生成する場合は,dc_trn_begin_s関数を呼び出します。
トランザクションを生成するタイミングを次の表に示します。
表2-8 トランザクションを生成するタイミング
dc_clt_connect_s関数発行済み | dc_clt_connect_s関数未発行 | ||
---|---|---|---|
tpconnect関数 発行済み | tpconnect関数 未発行 | tpconnect関数 発行済み | tpconnect関数 未発行 |
○ | ○ | ○ | × |
tpconnect関数を呼び出して会話型サービスとのコネクションを確立したあとでもdc_rpc_call_s関数は発行できます。
会話型サービスの通信形態を次の図に示します。
図2-33 会話型サービスの通信形態