#include <dcvrpc.h>
DCLONG dc_rpc_call_s(DCCLT_ID cltid, char *group,
char *service, char *in,
DCULONG *in_len, char *out,
DCULONG *out_len, DCLONG flags)
#include <dcvrpc.h>
int dc_rpc_call(char *group, char *service,
char *in, DCULONG *in_len,
char *out, DCULONG *out_len, DCLONG flags)
#include <dcvrpc.h>
DCLONG dc_rpc_call_s(DCCLT_ID cltid, char CLTFAR *group,
char CLTFAR *service, char CLTFAR *in,
DCULONG CLTFAR *in_len, char CLTFAR *out,
DCULONG CLTFAR *out_len, DCLONG flags)
#include <dcvrpc.h>
int dc_rpc_call(char CLTFAR *group, char CLTFAR *service,
char CLTFAR *in, DCULONG CLTFAR *in_len,
char CLTFAR *out, DCULONG CLTFAR *out_len,
DCLONG flags)
SPPのサービスを要求します。「サービスグループ名+サービス名」に該当するサービス関数を呼び,その応答を受け取ります。
サービス要求されたサーバUAPが存在するノードのOpenTP1は,稼働していなければなりません。OpenTP1が稼働していない場合(開始処理中を含む)は,dc_rpc_call_s関数はDCRPCER_NET_DOWN,DCRPCER_OLTF_NOT_UP,DCRPCER_OLTF_INITIALIZINGでエラーリターンします。
dc_rpc_call_s関数を実行したときに,目的のサービスグループが閉塞されている場合は,DCRPCER_SERVICE_CLOSEDでエラーリターンします。
dc_rpc_call_s関数を実行したときに,目的のサービスグループがdcsvstopコマンドなどで終了処理中,または終了している場合,DCRPCER_SERVICE_TERMINATING,DCRPCER_SERVICE_CLOSED,DCRPCER_NO_SUCH_SERVICE_GROUPのうちのどれかでエラーリターンします。どのリターン値が戻るかは,dc_rpc_call_s関数を実行したタイミングで決まります。
ソケット受信型サーバでは,ユーザサービス定義のmax_socket_msgとmax_socket_msglenの指定でデータの輻輳制御をしています。そのため,サービス要求を受信できない場合があります。このとき,dc_rpc_call_s関数は,DCRPCER_SERVER_BUSYでエラーリターンします。この値が戻った場合,CUPは適当な時間をおいてから再実行すれば,サービス要求できる場合があります。
XDM/DCCM3と通常の通信形態で通信する場合,クライアント環境定義DCCLTSERVICEGROUPLISTにXDM/DCCM3論理端末のホスト名およびポート番号を指定し,dc_rpc_call_s関数を実行します。
CUPではサービス関数の応答の領域(out)を確保しておきます。さらに,CUPではdc_rpc_call_s関数に次の値を指定します。
入力パラメタ,入力パラメタ長,応答の長さは,CUPのdc_rpc_call_s関数で指定した値がそのままサービス関数に渡されます。応答を返さないサービス関数のサービスを呼ぶときは,応答の長さを指定しても無視されます。
入力パラメタ長と応答の長さの最大値DCRPC_MAX_MESSAGE_SIZE※は,ヘッダファイルdcvrpc.hに定義されています。
サービス関数の処理終了後に,次の値が参照できます。
out_lenは,サービス関数から実際に返ってきた応答の長さです。
同期応答型RPC(flagsにDCNOFLAGSを設定)の場合,dc_rpc_call_s関数がリターンしたあと,outとout_lenを参照できます。非応答型RPC(flagsにDCRPC_NOREPLYを設定)の場合,outとout_lenは参照できません。また,dc_rpc_call_s関数がエラーリターンした場合もoutとout_lenは参照できません。
返ってきた応答がCUPで確保した応答の領域(out)よりも大きい場合は,リターン値DCRPCER_REPLY_TOO_BIGでエラーリターンします。
リターン値 | 数値 (10進数) | 意味 |
---|---|---|
DC_OK | 0 | 正常終了しました。 |
DCRPCER_INVALID_ARGS | -2401 | 引数に指定した値が誤っています。 |
DCRPCER_PROTO | -2402 | dc_rpc_open_s関数が実行されていません。 |
DCRPCER_NO_BUFS | -2404 | 必要なバッファが確保できませんでした。または,リソース不足が発生しました。 |
DCRPCER_NET_DOWN | -2406 | ネットワーク障害が発生しました。 |
DCRPCER_TIMED_OUT | -2407 | dc_rpc_call_s関数の処理で時間切れ(タイムアウト)が発生しました。または,サービス要求したSPPが処理完了前に異常終了しました。 |
DCRPCER_MESSAGE_TOO_BIG | -2408 | 入力パラメタ長が最大値を超えました。 |
DCRPCER_REPLY_TOO_BIG | -2409 | 返ってきた応答の長さが,CUPで用意した領域を超えています。 |
DCRPCER_NO_SUCH_SERVICE_GROUP | -2410 | 次のどちらかの要因が考えられます。
|
DCRPCER_NO_SUCH_SERVICE | -2411 | serviceに指定したサービス名は定義されていません。 |
DCRPCER_SERVICE_CLOSED | -2412 | serviceに指定したサービスが存在するサービスグループは,閉塞されています。 |
DCRPCER_SERVICE_TERMINATING | -2413 | 指定したサービスは終了処理中です。 |
DCRPCER_SERVICE_NOT_UP | -2414 | サービス要求先のSPPが未起動であるか,または処理完了前に異常終了しました。この値はクライアント環境定義DCWATCHTIMに0を指定(応答無限待ち指定)した場合に戻ります。 |
DCRPCER_OLTF_NOT_UP | -2415 | 指定したサービスが存在するノードのOpenTP1が実行されていません。または,トランザクション処理中,サーバとのコネクションが切断されているため,通信できません。 |
DCRPCER_SYSERR_AT_SERVER | -2416 | 指定したサービスでシステムエラーが発生しました。 |
DCRPCER_NO_BUFS_AT_SERVER | -2417 | 指定したサービスでメモリ不足が発生しました。 |
DCRPCER_SYSERR | -2418 | システムエラーが発生しました。 |
DCRPCER_INVALID_REPLY | -2419 | サービス関数がOpenTP1に返した応答長が,1からDCRPC_MAX_MESSAGE_SIZE※までの範囲にありません。 |
DCRPCER_OLTF_INITIALIZING | -2420 | サービス要求されたノードにあるOpenTP1は,開始処理中です。 |
DCRPCER_NO_BUFS_RB | -2423 | メモリ不足が発生しました。 |
DCRPCER_SYSERR_RB | -2424 | システムエラーが発生しました。 |
DCRPCER_SYSERR_AT_SERVER_RB | -2425 | 指定したサービスでシステムエラーが発生しました。 |
DCRPCER_REPLY_TOO_BIG_RB | -2426 | 返ってきた応答が,CUPで用意した領域に収まりません。 |
DCRPCER_TRNCHK | -2427 | ノード間負荷バランス機能の環境で,複数のSPPのトランザクション属性が一致していません。または,負荷を分散する先のノードにあるOpenTP1のバージョンが古いため,ノード間負荷バランス機能を実行できません。このリターン値は,ノード間負荷バランス機能を使用しているSPPにサービスを要求した場合にだけ戻ります。 |
DCRPCER_CONNFREE | -2442 | 常設コネクションが解放されました。 |
DCRPCER_SERVER_BUSY | -2456 | サービス要求先のソケット受信型サーバが,サービス要求を受信できません。 |
DCRPCER_TESTMODE | -2466 | クライアント環境定義DCUTOKEYを指定している環境下で,ユーザサービス定義でtest_mode=noと指定したSPPに対してサービス要求しました。 または,次の条件が重なった環境下から関数を呼び出しています。
|
DCRPCER_NOT_TRN_EXTEND | -2467 | トランザクション処理の連鎖RPCを使ったあとで,flagsにDCRPC_TPNOTRANを設定したdc_rpc_call_s関数でサービスを要求しています。 |
DCRPCER_SECCHK | -2470 | サービス要求先のSPPは,セキュリティ機能で保護されています。dc_rpc_call_s関数を呼び出したUAPには,サーバUAPへのアクセス権限がありません。 |
DCRPCER_TRNCHK_EXTEND | -2472 | 次のどれかの要因が考えられます。
|
DCRPCER_SERVICE_TERMINATED | -2478 | サービス要求先のSPPが処理完了前に異常終了しました。この値はクライアント環境定義DCEXTENDFUNCTIONに00000001を指定した場合に戻ります。00000000を指定しているか指定を省略していると,リターン値にはDCRPCER_TIMED_OUT,またはDCRPCER_SERVICE_NOT_UPが戻ります。 |
DCRPCER_VERSION_CHECK | -2479 | サービス要求先のTP1/Server Baseのバージョンが古い(03-03以降でない)ため,データ圧縮機能は使用できません。このリターン値は,トランザクションの範囲内でサービス要求した場合に戻ります。 |
DCCLTER_INVALID_CLTID | -2544 | cltidに指定したクライアントIDは,dc_clt_cltin_s関数で受け取ったクライアントIDと異なっています。 |
DCRPCER_PORT_IN_USE | -2547 | 指定したポート番号は使用されています。または,OSが自動的に割り当てるポート番号が不足しています。 |