2.3.10 メッセージ送達の確認
メッセージの送達確認には,UAPで実装する方法とTP1/NET/TCP/IPが提供する送達確認機能を使用する方法があります。
(1) UAPで実装する場合
UAPで実装する場合,メッセージ送達の確認は,あらかじめ相手システムと自システムのUAPとの間で送達確認のためのメッセージ形式を取り決めておき,送達確認メッセージの送受信によって行います。メッセージ送達確認の例を次の図に示します。
(2) TP1/NET/TCP/IPが提供する送達確認機能を使用する場合
TP1/NET/TCP/IPが提供する送達確認機能には,DCCMII/TCPおよびDCCM3/TCP(以降,DCCMII/TCPおよびDCCM3/TCPのメッセージ送達確認機能をサポートした相手システムをDCCMと呼びます)のメッセージ送達確認のプロトコルに従ったメッセージ送達確認と,任意の相手システムとのメッセージ送達確認があります。
(a) DCCMとのメッセージ送達確認
DCCMのメッセージ送達確認のプロトコルに従って,メッセージ送受信を行います。UAPは応答専用データ(DCCMのメッセージ送達確認機能で使用される送達確認メッセージ)を意識する必要はありません。
DCCMと接続し,メッセージ送達確認機能を使用する場合,TP1/NET/TCP/IPの定義とDCCMの定義を対応させる必要があります。対応させる内容の詳細については,「6. システム定義」の「DCCMII/TCPおよびDCCM3/TCPの通信定義との関係」を参照してください。
DCCMへの一方送信時の処理の流れを,dc_mcf_send関数を使用する場合を例に,次の図に示します。
-
MHP,またはSPPから一方送信メッセージを受信します。
-
DCCMへ一方送信メッセージを送信します。
-
DCCMから応答専用データを受信します。
-
TP1/NET/TCP/IPが付加した送信メッセージのメッセージIDと,DCCMが付加した応答専用データのメッセージIDを比較します。その結果,メッセージIDが一致した場合,送信処理を完了します。不一致の場合は,受信した応答専用データを破棄します。
-
送信を完了した場合,送信完了通知イベント(SCMPEVT)をMHPに通知します。
-
送信を完了した場合,出力キューにある一方送信メッセージのデータを消去します。
TP1/NET/TCP/IPは,受信した応答専用データをUAPに通知しません。
コネクション定義のメッセージ送信完了監視時間(mcftalccn -b sndcmptim)を指定している場合,メッセージ送信から応答専用データの受信までを監視できます。応答専用データの受信監視時間がタイムアウトした場合,CERREVTを起動します。このとき,送信メッセージは出力キューに戻されます。
DCCMからの一方受信時の処理の流れを,dc_mcf_receive関数を使用する場合を例に,次の図に示します。
-
DCCMから一方送信メッセージを受信します。
-
入力キューへの書き込みが完了した時点で応答専用データを送信します。
DCCMからの受信メッセージ内のセグメント情報に応答不要が指定されている場合は,応答専用データを送信しません。
TP1/NET/TCP/IPとDCCM間で送受信するメッセージの形式を次の図に示します。
メッセージ送達確認機能を使用する場合,メッセージ長,セグメント情報,メッセージIDはTP1/NET/TCP/IPが自動的に付加・削除します。
- メッセージ長
-
メッセージの組み立て・分解をするための全体長です。
- セグメント情報
-
セグメントの種類と応答要求の種類が設定されます。セグメントの種類と応答要求の種類を次の表に示します。なお,次の表に示す格納値以外の値は不正データとし,コネクションを解放します。
表2‒6 セグメントの種類と応答要求の種類 セグメントの種類
応答要求の種類
格納値※
TP1/NET/TCP/IPからの送信
DCCMからの送信
単一セグメント
応答不要
−
(10)16
自動応答要求
(18)16
(18)16
DCCMのプロトコルではセグメント情報に単一セグメントと複数セグメントを設定できますが,TP1/NET/TCP/IPは単一セグメントだけをサポートします。DCCMから複数セグメントのメッセージを受信した場合,TP1/NET/TCP/IPは不正データと見なしてコネクションを解放します。
- メッセージID
-
メッセージと応答専用データの組を確認するための情報です。TP1/NET/TCP/IPはメッセージ送信ごとにユニークな値を採番します。
TP1/NET/TCP/IPとDCCM間で送受信する応答専用データの形式を次の図に示します。
- メッセージ長
-
メッセージの組み立て・分解をするための全体長として,11を設定します。
- セグメント情報
-
TP1/NET/TCP/IPは,単一セグメント,応答専用データを示す,0x10を設定します。
- メッセージID
-
DCCMから受信したメッセージのメッセージIDを設定します。
TP1/NET/TCP/IPのメッセージ送信と,DCCMのメッセージ送信が衝突した場合の処理の流れについては,「付録F 送受信メッセージの衝突時の処理の流れ(メッセージ送達確認機能使用時)」を参照してください。
(b) 任意の相手システムとのメッセージ送達確認
受信メッセージ判定UOCを使用し,TP1/NET/TCP/IPが受信したメッセージが送達確認メッセージかどうかを判定することで,任意の相手システムとのメッセージ送達確認を行うことができます。
受信メッセージ判定UOCを使用した任意の相手システムとのメッセージ送達確認では,受信メッセージ判定UOCのmsg_typeに指定したメッセージの種別によって,処理が異なります。
メッセージの種別には,次の種別があります。
-
DCTCP_UOC_MR_MT_ACK(送達確認メッセージ)
-
DCTCP_UOC_MR_MT_INFO(一方送信メッセージ)
-
DCTCP_UOC_MR_MT_CLS(コネクション解放)
-
DCTCP_UOC_MR_MT_IGN(破棄メッセージ)
種別ごとに,処理の流れを説明します。
■ 相手システムへの一方送信(DCTCP_UOC_MR_MT_ACK(送達確認メッセージ)の場合)
相手システムへの一方送信時の処理の流れを次の図に示します。
-
UAPは相手システムへの一方送信メッセージを送信します。
-
相手システムは,送達確認メッセージを送信します。
-
相手システムからの送達確認メッセージを待ち合わせ,受信します。
-
メッセージ受信時に起動する受信メッセージ判定UOCで送達確認メッセージを指定した場合,送信処理を完了します。
-
送信を完了した場合,送信完了通知イベント(SCMPEVT)をMHPに通知します。
-
送信を完了した場合,出力キューから送信済みメッセージのデータを消去します。
- 注
-
送達確認メッセージを不要とする一方送信メッセージは送信できません。
コネクション定義のメッセージ送信完了監視時間(mcftalccn -b sndcmptim)を指定している場合,メッセージ送信から送達確認メッセージの受信までを監視できます。メッセージ送信完了監視時間がタイムアウトした場合,CERREVTを起動します。このとき,送信メッセージは出力キューに戻されます。
■ 相手システムからの一方受信(DCTCP_UOC_MR_MT_INFO(一方送信メッセージ)の場合)
相手システムからの一方受信時の処理の流れを次の図に示します。
-
相手システムから一方送信メッセージを受信します。
-
受信メッセージ判定UOCで一方送信メッセージを設定した場合,一方送信メッセージを受信し,UAPにメッセージ受信を通知します。
-
受信メッセージ判定UOCで,送達確認メッセージの送信要否に応答要を設定した場合,TP1/NET/TCP/IPは入力キューへの書き込みが完了した時点で受信メッセージ判定UOCで編集したメッセージを送信します。
■ 相手システムからの一方受信(DCTCP_UOC_MR_MT_CLS(コネクション解放)の場合)
受信メッセージ判定UOCで,メッセージ種別にコネクション解放を設定した場合,TP1/NET/TCP/IPは受信したメッセージをUAPに通知しないで破棄し,メッセージログ(KFCA14850-I)を出力してコネクションを解放し,CERREVTを起動します。このとき,送信処理中のメッセージは出力キューに残ります。
■ 相手システムからの一方受信(DCTCP_UOC_MR_MT_IGN(破棄メッセージ)の場合)
受信メッセージ判定UOCで,メッセージ種別に破棄メッセージを設定した場合,TP1/NET/TCP/IPはメッセージログ(KFCA14849-I)を出力して,受信したメッセージをUAPに通知しないで破棄します。コネクション確立状態を維持したまま受信したメッセージをUAPに通知させない場合に指定してください。
TP1/NET/TCP/IPのメッセージ送信と,相手システムのメッセージ送信が衝突した場合の処理の流れについては,「付録F 送受信メッセージの衝突時の処理の流れ(メッセージ送達確認機能使用時)」を参照してください。