7.5.2 例: 階層構造の会話の終了
次の図は、正常に終了する階層構造の会話を示しています。
図7-3 接続の階層構造

この例では、サービスBは会話のメンバーで、2番目のサービスCとの接続を開始しています。つまり、A - B間とB - C間という2つのアクティブな接続が存在しています。Bがこの両方の接続を制御している場合にtpreturn()の呼出しを行うと、呼出しは失敗し、すべてのオープン接続にTPEV_SVCERR
イベントが通知され、接続が切断されます。
両方の接続を正常に終了するには、次の処理を順に行います。
- Bは、Cとの接続に
TPRECVONLY
フラグを設定してtpsend()を呼び出し、B - C間の接続の制御をCに渡します。 - Cは、状況に応じて
rval
にTPSUCCESS
、TPFAIL
またはTPEXIT
を設定して、tpreturn()
を呼び出します。 - Bは、
tpreturn()
を呼び出し、Aにイベント(TPEV_SVCSUCC
またはTPEV_SVCFAIL
)を通知します。
ノート:
会話型サービスは、別のサービスと通信するためにリクエスト/レスポンス型の呼出しを行うことができます。そのため、前述の例では、BからCへの呼出しにtpconnect()ではなくtpcall()またはtpacall()を使用することもできます。ただし、会話型サービスがtpforward()を呼び出すことはできません。親トピック: 会話の終了