6.7.1 CBLDCCLS('NOTIFY ') − 一方通知メッセージの受信
(1) 形式
(a) マルチスレッド環境の場合
■ PROCEDURE DIVISIONの指定
CALL 'CBLDCCLS' USING 一意名1 一意名2
■ DATA DIVISIONの指定
01 一意名1. 02 データ名A PIC X(8) VALUE 'NOTIFY '. 02 データ名B PIC X(5). 02 FILLER PIC X(3). 02 データ名C PIC S9(9) COMP VALUE ZERO. 02 データ名D PIC 9(4) COMP. 02 FILLER PIC X(2). 02 データ名E PIC S9(9) COMP. 02 データ名F PIC X(64). 02 データ名G PIC X(8). 02 FILLER PIC 9(4) COMP. 02 FILLER PIC X(2). 02 データ名I PIC X(256). 01 一意名2. 02 データ名J PIC S9(9) COMP. 02 データ名K PIC X(n).
(b) シングルスレッド環境の場合
■ PROCEDURE DIVISIONの指定
CALL 'CBLDCCLT' USING 一意名1 一意名2
■ DATA DIVISIONの指定
01 一意名1. 02 データ名A PIC X(8) VALUE 'NOTIFY '. 02 データ名B PIC X(5). 02 FILLER PIC X(3). 02 データ名C PIC S9(9) COMP VALUE ZERO. 02 データ名D PIC 9(4) COMP. 02 FILLER PIC X(2). 02 データ名E PIC S9(9) COMP. 02 データ名F PIC X(64). 02 データ名G PIC X(8). 01 一意名2. 02 データ名J PIC S9(9) COMP. 02 データ名K PIC X(n).
(2) 機能
サーバ側の要求コード(CBLDCRPC('CLTSEND '))によって通知されるメッセージを,データ名Eで指定した値まで待ち続けます。受信した時点でCUPに制御を戻し,ステータスコード,通知メッセージ,通知元サーバのホスト名,通知元サーバのノード識別子を返します。また,この要求コードの実行前にCBLDCCLS('CLTIN '),およびCBLDCRPS('OPEN ')を実行しておく必要はありません。
(3) UAPで値を設定するデータ領域
-
データ名A
一方通知メッセージの受信を示す要求コードを「VALUE 'NOTIFY△△'」と設定します。
-
データ名C
0を指定します。
-
データ名D
クライアントのポート番号を指定します。5001から65535の範囲で指定します。なお,同一マシン内で,複数のプロセス,または複数のスレッドを同時に実行する場合は,それぞれ異なるポート番号を指定してください。
-
データ名E
タイムアウト値(秒)を指定します。0から65535の範囲で指定します。
無限に待ち続ける場合は,0を指定します。
-
データ名I
クライアント環境定義ファイルへのパス名を指定します。パス名には完全パス,またはカレントドライブ・ディレクトリからの相対パスが指定できます。パス名を指定した場合のファイルの読み込み順序を次に示します。
-
TP1/Client/Pの場合
クライアント環境定義ファイルの読み込み順序は次のとおりです。
1.WindowsディレクトリのBETRAN.INIファイル
2.データ名Iに指定したクライアント環境定義ファイル
定義は,クライアント環境定義ファイルおよびBETRAN.INIファイルのどちらのファイルに指定しても有効です。
両方のファイルに同じ定義を異なる値で指定した場合は,クライアント環境定義ファイルに指定した値が有効となります。
クライアント環境定義ファイルおよびBETRAN.INIファイルのどちらにも指定がない場合は,デフォルト値で動作します。
-
TP1/Client/Wの場合
環境変数に指定されている定義は,すべて無効となります。データ名Iに指定したクライアント環境定義ファイルに指定されていない定義はデフォルト値で動作します。
また,データ名Iの先頭に空白を指定することでパス名を省略できます。省略時の動作を次に示します。
-
TP1/Client/Pの場合
WindowsディレクトリのBETRAN.INIファイルをクライアント環境定義ファイルとして動作します。BETRAN.INIファイルがない場合,または定義ファイルの内容が不正な場合はデフォルト値で動作します。
-
TP1/Client/Wの場合
環境変数の指定で動作します。環境変数が指定されていない場合は,デフォルト値で動作します。
データ名Iに指定したクライアント環境定義ファイルがない場合,または定義ファイルの内容が不正な場合の動作を次に示します。
-
TP1/Client/Pの場合
WindowsディレクトリのBETRAN.INIファイルをクライアント環境定義ファイルとして動作します。BETRAN.INIファイルがない場合,または定義ファイルの内容が不正な場合は,デフォルト値で動作します。
-
TP1/Client/Wの場合
デフォルト値で動作します。環境変数の指定は無効となります。
-
-
データ名J
サーバからの通知メッセージを格納する領域長(データ名Kの長さ)を指定します。0からDCRPC_MAX_MESSAGE_SIZE※の範囲で指定します。
- 注※
-
クライアント環境定義DCCLTRPCMAXMSGSIZEに2以上を指定した場合,DCRPC_MAX_MESSAGE_SIZEの値(1メガバイト)ではなく,クライアント環境定義DCCLTRPCMAXMSGSIZEに指定した値になります。
-
データ名K
サーバからの通知メッセージを格納する領域です。データ名Jで設定する長さ以上の領域を用意してください。
(4) 値が返されるデータ領域
-
データ名B
ステータスコードが,5けたの数字で返されます。
-
データ名F
通知したサーバのホスト名が返されます。ホスト名への変換に失敗した場合,10進ドット記法のIPアドレスが返されます。
-
データ名G
通知したサーバのノード識別子が返されます。ノード識別子のフォーマットは次のとおりです。
-
データ名J
サーバからの通知メッセージ長が返されます。
-
データ名K
サーバからの通知メッセージが返されます。
(5) ステータスコード
ステータスコード |
意味 |
---|---|
00000 |
正常終了しました。 |
02501 |
データ名に設定した値が間違っています。要求コード(データ名A)が間違っている場合も含みます。 |
02503 |
初期化に失敗しました。または,クライアント環境定義の指定に誤りがあります。 |
02504 |
必要なバッファが確保されませんでした。 |
02506 |
ネットワーク障害が発生しました。 |
02507 |
メッセージの受信時にタイムアウトになりました。 |
02518 |
システムエラーが発生しました。 |
02535 |
バージョン不一致が発生しました。 |
02546 |
受信したメッセージが,CUPで用意した領域に収まりません。収まり切らないメッセージは切り捨てました。データ名F,データ名Gには,値を設定済みです。 |
02547 |
指定したポート番号は使用されています。 |
02548 |
不正なメッセージを受信しました。 |
02549 |
一方通知受信待ち状態がCBLDCCLS('CANCEL ')によって解除されました。引数データ名F,データ名J,およびデータ名Kには,値を設定済みです。 |
(6) 注意事項
-
同一マシン内で,複数のプロセス,または複数のスレッドを同時に実行する場合,データ名Dにはそれぞれ異なるポート番号を指定してください。また,データ名Dに指定できるポート番号でも,OSまたはほかのプログラムが使用するポート番号は指定しないでください。指定した場合,応答データを正しく受信できないことがあります。なお,OSが使用するポート番号は,OSごとに異なります。OSが使用するポート番号については,OSのマニュアルなどを参照してください。
-
ステータスコード02518が戻る場合,CUPを終了してから開始し直してください。