6.6.6 CBLDCCLS('ASMRECV ') − 組み立てメッセージの受信
(1) 形式
(a) マルチスレッド環境の場合
■ PROCEDURE DIVISIONの指定
CALL 'CBLDCCLS' USING 一意名1 一意名2 一意名3
■ DATA DIVISIONの指定
01 一意名1. 02 データ名A PIC X(8) VALUE 'ASMRECV '. 02 データ名B PIC X(5). 02 FILLER PIC X(3). 02 データ名C PIC S9(9) COMP VALUE ZERO. 02 データ名D PIC S9(9) COMP. 01 一意名2. 02 データ名E PIC S9(9) COMP. 02 データ名F PIC X(n). 01 一意名3. 02 データ名G PIC 9(9) COMP-X.
(b) シングルスレッド環境の場合
■ PROCEDURE DIVISIONの指定
CALL 'CBLDCCLT' USING 一意名1 一意名2
■ DATA DIVISIONの指定
01 一意名1. 02 データ名A PIC X(8) VALUE 'ASMRECV '. 02 データ名B PIC X(5). 02 FILLER PIC X(3). 02 データ名C PIC S9(9) COMP VALUE ZERO. 02 データ名D PIC S9(9) COMP. 01 一意名2. 02 データ名E PIC S9(9) COMP. 02 データ名F PIC X(n).
(2) 機能
メッセージの組み立て機能を使用して,メッセージを受信します。この場合,4バイトのメッセージ情報を受信したあと,メッセージ情報に設定されたメッセージ長分のメッセージを受信し,データ名Fに格納します。ただし,メッセージ情報は,データ名Fには格納しません。データ名Eには,受信したメッセージ長を格納します。データ名Eに格納するメッセージ長には,メッセージ情報の長さは含みません。
また,クライアント環境定義DCCLTDELIVERYCHECKにYを指定した場合は,メッセージの送達確認機能を使用して,メッセージを送受信します。この場合,11バイトのメッセージ情報を受信した後,メッセージ情報に設定されたメッセージ長分のメッセージを受信し,データ名Fに格納します。ただし,メッセージ情報は,データ名Fには格納しません。データ名Eには,受信したメッセージ長を格納します。データ名Eに格納するメッセージ長には,メッセージ情報の長さは含みません。受信したメッセージ情報に「応答要求」が設定されていた場合は,11バイトのメッセージ情報を送信したあと,CUPに制御を戻します。
CBLDCCLS('ASMRECV ')を実行する場合,データ名Cに8,または16を指定したCBLDCRPS('OPEN ')を,あらかじめ実行しておく必要があります。
(3) UAPで値を設定するデータ領域
-
データ名A
メッセージの受信を示す要求コードを「VALUE 'ASMRECV△'」と設定します。
-
データ名C
メッセージを受信したあと,コネクションを解放するかどうかを指定します。
0:メッセージを受信したあと,CBLDCRPS('CLOSE ')実行時に,コネクションを解放します。ただし,障害時を除きます。
2:メッセージを受信したあと,コネクションを解放します。メッセージの送達確認機能の使用時に,受信したメッセージ情報に「応答要求」が設定されていた場合は,メッセージ情報を送信後,コネクションを解放します。
-
データ名D
メッセージ受信時の最大待ち時間(秒)を指定します。-1から65535の整数を設定してください。
- -1を指定した場合
-
メッセージを受信するまで無制限に待ちます。
- 0を指定した場合
-
メッセージの受信を待ちません。受信するメッセージがなかった場合は,02507でエラーリターンします。
- 1から65535を指定した場合
-
指定した秒数だけメッセージの受信を待ちます。指定した秒数を過ぎてもメッセージを受信できない場合は,02507でエラーリターンします。
メッセージが分割されて届いた場合,メッセージ長分のメッセージが届くまで受信処理を繰り返し行います。受信処理が発生すると,この引数に指定した値が毎回適用されます。この引数に指定した値をクライアントの最大応答待ち時間として適用したい場合は,クライアント環境定義DCCLTOPTIONに,00000002オプションを指定してください。
-
データ名E
受信するメッセージの長さを指定します。
-
データ名F
受信したメッセージを格納する領域です。データ名Eで設定する長さ以上の領域を用意してください。
-
データ名G
CBLDCCLS('CLTIN '),またはCBLDCCLS('EXCLTIN ')で受け取ったクライアントIDを指定します。
(4) 値が返されるデータ領域
-
データ名B
ステータスコードが,5けたの数字で返されます。
-
データ名E
受信したメッセージの長さが返されます。メッセージ情報の長さは,含みません。
タイムアウト発生時は,タイムアウトまでに受信できたメッセージの長さが格納されます。
-
データ名F
受信したメッセージが返されます。メッセージ情報は,含みません。
タイムアウト発生時は,タイムアウトまでに受信できたメッセージが格納されます。
(5) ステータスコード
ステータスコード |
意味 |
---|---|
00000 |
正常に終了しました。 |
02501 |
引数に指定した値が誤っています。 |
02502 |
次のどちらかの要因が考えられます。
|
02504 |
メモリ不足が発生しました。 |
02506 |
ネットワーク障害が発生しました。コネクションは解放されます。 |
02507 |
メッセージの受信時にタイムアウトになりました。コネクションは解放されます。 |
02518 |
システムエラーが発生しました。ネットワーク障害の場合,コネクションは解放されます。 |
02538 |
資源不足が発生しました。 |
02542 |
相手システムからコネクションが解放されました。 |
02544 |
データ名Gに指定したクライアントIDは,CBLDCCLS('CLTIN '),またはCBLDCCLS('EXCLTIN ')で受け取ったクライアントIDと異なっています。 |
02546 |
CUPで用意した領域が小さく,相手システムからのメッセージを受信することができません。コネクションは解放されます。 |
02548 |
不正なメッセージを受信しました。コネクションは解放されます。 |
(6) 注意事項
-
CBLDCCLS('ASMRECV ')は,次に示す場合だけCUPに制御を戻します。
-
メッセージ情報に設定されたメッセージ長分のメッセージを受信した場合
-
ネットワーク障害が発生した場合
-
メッセージ受信時に,タイムアウトが発生した場合
-
相手システムからコネクションが解放された場合
-
メッセージを格納する領域(データ名F)が小さく,通信相手が送信するメッセージを格納することができない場合
-
不正なメッセージを受信した場合
-
-
メッセージの組み立て機能およびメッセージの送達確認機能を使用する場合は,短いパケットで送受信するため,送信処理に時間が掛かることがあります。送信処理に時間が掛かる場合は,クライアント環境定義DCCLTTCPNODELAYにYを指定してください。
-
ステータスコード02518が戻る場合,CUPを終了してから開始し直してください。