Hitachi

OpenTP1 Version 7 分散トランザクション処理機能 OpenTP1 クライアント使用の手引 TP1/Client/W,TP1/Client/P編


2.5.2 メッセージの一方受信

MHPから送信されたメッセージをCUPで受信できます。これをメッセージの一方受信といいます。

メッセージの一方受信を行う場合は,CUPでflagsにDCCLT_ONEWAY_RCVを指定したdc_rpc_open_s関数を実行しておく必要があります。その後,CUPで,dc_clt_receive_s関数,またはdc_clt_receive2_s関数を実行して,MHPからのメッセージをTCP/IPプロトコルを使用して受信します。メッセージの組み立て機能,または送達確認機能を使用する場合は,dc_clt_assem_receive_s関数を実行します。

TCP/IPプロトコルでは,一つのメッセージを複数のパケットに分割したり,複数のメッセージを一つのパケットに詰め込んだりします。そのため,受信したメッセージの切れ目は,ユーザが指定するメッセージ長で判断します。ユーザはメッセージ長を含めた固定長のヘッダを最初に受信し,ヘッダに含まれているメッセージ長を指定して実際のメッセージを受信してください。ただし,メッセージの組み立て機能,または送達確認機能を使用するときは,これらの処理をCUPで作り込む必要はありません。

指定したメッセージ長よりも短いメッセージを受信した場合,TP1/Clientは,メッセージが分割されているものとみなし,指定した長さ分のメッセージを受信するまで,CUPに制御を戻しません。指定した長さ分のメッセージを受信する前に時間切れ(タイムアウト)や,エラーが発生した場合,dc_clt_receive_s関数を実行すると,受信したメッセージは破棄されます。dc_clt_receive2_s関数,またはdc_clt_assem_receive_s関数を実行する場合は,その時点までに受信したメッセージを破棄しないで,CUPに制御を戻すことができます。タイムアウトやエラー発生時に指定した長さ分のメッセージに満たない場合でも,その時点までのメッセージを受信できます。ただし,それ以降のメッセージの組み立てについては,ユーザの責任で行ってください。

メッセージを一方受信するには,あらかじめ,クライアント環境定義DCRCVPORTに,CUPの受信用ポート番号(MCF通信構成定義の定義コマンドmcftalccnのoportnoで指定したポート番号)を指定しておく必要があります。マルチスレッドで動作するCUPを含め,同一マシンでCUPを複数実行する場合は,クライアント環境定義DCRCVPORTをCUPごと(スレッドごと)に異なるポート番号となるように設定してください。CUPごとのクライアント環境定義の設定方法については,「8.2.3 TP1/Client/Wの設定方法」,および「8.2.4 TP1/Client/Pの設定方法」を参照してください。受信用ソケットの開設は,dc_rpc_open_s関数実行時に行います。

メッセージの一方受信を,次の図に示します。

図2‒19 メッセージの一方受信

[図データ]

障害発生時のメッセージの一方受信を,次の図に示します。

図2‒20 メッセージの一方受信(障害発生時)

[図データ]