7.5.2 例: 階層構造の会話の終了

次の図は、正常に終了する階層構造の会話を示しています。

図7-3 接続の階層構造


接続の階層構造の図

この例では、サービスBは会話のメンバーで、2番目のサービスCとの接続を開始しています。つまり、A - B間とB - C間という2つのアクティブな接続が存在しています。Bがこの両方の接続を制御している場合にtpreturn()の呼出しを行うと、呼出しは失敗し、すべてのオープン接続にTPEV_SVCERRイベントが通知され、接続が切断されます。

両方の接続を正常に終了するには、次の処理を順に行います。

  1. Bは、Cとの接続にTPRECVONLYフラグを設定してtpsend()を呼び出し、B - C間の接続の制御をCに渡します。
  2. Cは、状況に応じてrvalTPSUCCESSTPFAILまたはTPEXITを設定して、tpreturn()を呼び出します。
  3. Bは、tpreturn()を呼び出し、Aにイベント(TPEV_SVCSUCCまたはTPEV_SVCFAIL)を通知します。

ノート:

会話型サービスは、別のサービスと通信するためにリクエスト/レスポンス型の呼出しを行うことができます。そのため、前述の例では、BからCへの呼出しにtpconnect()ではなくtpcall()またはtpacall()を使用することもできます。ただし、会話型サービスがtpforward()を呼び出すことはできません。