4.7.1 dc_clt_accept_notification_s − 一方通知メッセージの受信
(1) 形式
(a) TP1/Client/Wの場合
■ _s付き関数
#include <dcvclt.h> DCLONG dc_clt_accept_notification_s( HWND hWnd, char *defpath, char *inf, DCLONG *inf_len, unsigned short port, DCLONG timeout, char *hostname, char *nodeid, DCLONG flags)
■ _s無し関数
#include <dcvclt.h> DCLONG dc_clt_accept_notification( char *inf, DCLONG *inf_len, unsigned short port, DCLONG timeout, char *hostname, char *nodeid, DCLONG flags)
(b) TP1/Client/Pの場合
■ _s付き関数
#include <dcvclt.h> DCLONG dc_clt_accept_notification_s( HWND hWnd, char CLTFAR *defpath, char CLTFAR *inf, DCLONG CLTFAR *inf_len, unsigned short port, DCLONG timeout, char CLTFAR *hostname, char CLTFAR *nodeid, DCLONG flags)
■ _s無し関数
#include <dcvclt.h> DCLONG dc_clt_accept_notification( char CLTFAR *inf, DCLONG CLTFAR *inf_len, unsigned short port, DCLONG timeout, char CLTFAR *hostname, char CLTFAR *nodeid, DCLONG flags)
(2) 機能
サーバ側の関数(dc_rpc_cltsend)によって通知されるメッセージを,引数timeoutで指定した値まで待ち続けます。受信した時点でCUPに制御を戻し,リターンコード,通知メッセージ,通知元サーバのホスト名,通知元サーバのノード識別子を返します。この関数の発行前にdc_clt_cltin_s関数およびdc_rpc_open_s関数を発行しておく必要はありません。
(3) UAPで値を設定する引数
-
hWnd
NULLを指定します。
-
defpath
クライアント環境定義ファイルへのパス名を指定します。パス名には完全パス,またはカレントドライブ・ディレクトリからの相対パスが指定できます。パス名を指定した場合のファイルの読み込み順序を次に示します。
-
TP1/Client/Pの場合
クライアント環境定義ファイルの読み込み順序は次のとおりです。
1.WindowsディレクトリのBETRAN.INIファイル
2.引数defpathに指定したクライアント環境定義ファイル
定義は,クライアント環境定義ファイルおよびBETRAN.INIファイルのどちらのファイルに指定しても有効です。
両方のファイルに同じ定義を異なる値で指定した場合は,クライアント環境定義ファイルに指定した値が有効となります。
クライアント環境定義ファイルおよびBETRAN.INIファイルのどちらにも指定がない場合は,デフォルト値で動作します。
-
TP1/Client/Wの場合
環境変数に指定されている定義は,すべて無効となります。引数defpathに指定したクライアント環境定義ファイルに指定されていない定義はデフォルト値で動作します。
また,引数defpathの先頭にNULLを指定することでパス名を省略できます。省略時の動作を次に示します。
-
TP1/Client/Pの場合
WindowsディレクトリのBETRAN.INIファイルをクライアント環境定義ファイルとして動作します。BETRAN.INIファイルがない場合,または定義ファイルの内容が不正な場合はデフォルト値で動作します。
-
TP1/Client/Wの場合
環境変数の指定で動作します。環境変数が指定されていない場合は,デフォルト値で動作します。
引数defpathに指定したクライアント環境定義ファイルがない場合,または定義ファイルの内容が不正な場合の動作を次に示します。
-
TP1/Client/Pの場合
WindowsディレクトリのBETRAN.INIファイルをクライアント環境定義ファイルとして動作します。BETRAN.INIファイルがない場合,または定義ファイルの内容が不正な場合は,デフォルト値で動作します。
-
TP1/Client/Wの場合
デフォルト値で動作します。環境変数の指定は無効となります。
-
-
inf
サーバからの通知メッセージを格納する領域を指定します。
-
inf_len
サーバからの通知メッセージを格納する領域の長さ(引数infの長さ)を指定します。0からDCRPC_MAX_MESSAGE_SIZE※の範囲で指定します。
- 注※
-
クライアント環境定義DCCLTRPCMAXMSGSIZEに2以上を指定した場合,DCRPC_MAX_MESSAGE_SIZEの値(1メガバイト)ではなく,クライアント環境定義DCCLTRPCMAXMSGSIZEに指定した値になります。
-
port
クライアントのポート番号を指定します。5001から65535の範囲で指定します。なお,同一マシン内で,複数のプロセス,または複数のスレッドを同時に実行する場合は,それぞれ異なるポート番号を指定してください。
-
timeout
タイムアウト値(秒)を指定します。0から65535の範囲で指定します。
無限に待ち続ける場合は,0を指定します。
-
hostname
通知したサーバのホスト名を格納する,64バイト※以上の領域を指定します。NULLが指定された場合は,ホスト名を格納しません。
- 注※
-
クライアント環境定義DCCLTOPTIONに00000008を指定した場合,64バイトではなく,256バイトになります。
-
nodeid
通知したサーバのノード識別子を格納する,8バイトの領域を指定します。
-
flags
DCNOFLAGSを指定します。
(4) 値が返される引数
-
inf
サーバからの通知メッセージが返されます。
-
inf_len
サーバからの通知メッセージ長が返されます。
-
hostname
通知したサーバのホスト名が返されます。ホスト名への変換に失敗した場合,10進ドット記法のIPアドレスが返されます。NULLを指定した場合は,返されません。
-
nodeid
通知したサーバのノード識別子が返されます。ノード識別子のフォーマットは次のとおりです。
(5) リターン値
リターン値 |
数値 (10進数) |
意味 |
---|---|---|
DC_OK |
0 |
正常終了しました。 |
DCCLTER_INVALID_ARGS |
-2501 |
引数に指定した値が誤っています。 |
DCCLTER_FATAL |
-2503 |
初期化に失敗しました。または,クライアント環境定義の指定に誤りがあります。 |
DCCLTER_NO_BUFS |
-2504 |
必要なバッファが確保できませんでした。 |
DCCLTER_NET_DOWN |
-2506 |
ネットワーク障害が発生しました。 |
DCCLTER_TIMED_OUT |
-2507 |
メッセージの受信時にタイムアウトになりました。 |
DCCLTER_SYSERR |
-2518 |
システムエラーが発生しました。 |
DCCLTER_VERSION |
-2535 |
バージョン不一致が発生しました。 |
DCCLTER_INF_TOO_BIG |
-2546 |
受信したメッセージが,CUPで用意した領域に収まりません。収まり切らないメッセージは切り捨てました。引数hostnameおよびnodeidには値を設定済みです。 |
DCCLTER_PORT_IN_USE |
-2547 |
指定したポート番号は使用されています。 |
DCCLTER_INVALID_MESSAGE |
-2548 |
不正なメッセージを受信しました。 |
DCCLTER_ACCEPT_CANCELED |
-2549 |
一方通知受信待ち状態がdc_clt_cancel_notification_s関数によって解除されました。引数inf,inf_len,およびhostnameには値を設定済みです。 |
(6) 注意事項
-
引数hostnameには64バイト※以上,引数nodeidには8バイト以上の領域を指定してください。領域がそれより小さい場合,TP1/Client内部の処理で領域破壊を起こすおそれがあります。
- 注※
-
クライアント環境定義DCCLTOPTIONに00000008を指定した場合,64バイトではなく,256バイトになります。
-
同一マシン内で,複数のプロセス,または複数のスレッドを同時に実行する場合,引数portにはそれぞれ異なるポート番号を指定してください。また,引数portに指定できるポート番号でも,OSまたはほかのプログラムが使用するポート番号は指定しないでください。指定した場合,応答データを正しく受信できないことがあります。なお,OSが使用するポート番号は,OSごとに異なります。OSが使用するポート番号については,OSのマニュアルなどを参照してください。
-
TP1/Clientでは,dc_clt_accept_notification_s関数の呼び出しごとにクライアント環境定義を定義できます。dc_clt_accept_notification_s関数の呼び出しごとにクライアント環境定義を定義するには,dc_clt_accept_notification_s関数の呼び出しごとに,異なるファイルをクライアント環境定義ファイルとして作成して,そのファイル名をdc_clt_accept_notification_s関数の引数defpathに指定してください。