ee_rpc_poll_any_replies
形式
ANSI C,C++の形式
#include <eerpc.h> int ee_rpc_poll_any_replies(int des, EELONG timeout, EELONG flags)
機能
非同期応答型RPC(ee_rpc_call関数のflagsにEERPC_NOWAITを設定)でサービス要求した結果を受信します。
受信する非同期応答を特定する場合は,flagsにEERPC_SPECIFIC_MSGを設定します。このフラグを設定した場合は,desに設定した記述子をリターンした非同期応答型RPCの応答を受信します。
受信する非同期応答を特定しない場合は,flagsにEENOFLAGSを設定します。このとき,desに設定した値は無視されます。flagsにEENOFLAGSを設定したee_rpc_poll_any_replies関数が正常に終了すると,受信した非同期応答の記述子と同じ値をリターンします。
ee_rpc_poll_any_replies関数は,次のどちらかの場合にリターンします。
-
非同期応答型RPCの応答を受信した場合
-
timeoutに設定した応答待ち時間が終了した場合
UAPで値を設定する引数
●des
非同期応答型RPCのee_rpc_call関数(flagsにEERPC_NOWAITを設定)が正常に終了したときに返される記述子を設定します。flagsにEENOFLAGSを設定した場合は,ここに設定した値は無視されます。
●timeout
非同期応答型RPCのee_rpc_call関数の結果が返ってくるまでの待ち時間を,秒単位またはミリ秒単位で設定します。設定できる値の範囲は,-1からEELONG型で表せる最大の数までです。
ee_rpc_poll_any_replies関数で非同期応答を受信する場合は,RPC関連定義のwatch_timeオペランドまたはee_rpc_set_watch_time関数で設定した応答待ち時間を参照しません。
0を設定した場合で,flagsにEERPC_WAIT_MILLISECを設定していないとき,応答が返ってこないとEERPCER_TIMED_OUTですぐにエラーリターンします。flagsにEERPC_WAIT_MILLISECを設定したときは50ミリ秒として処理します。
-1を設定した場合は,応答が返るまで待ち続けます。
●flags
RPCの形態とオプションを次に示す形式で設定します。
{EENOFLAGS|EERPC_SPECIFIC_MSG}〔|EERPC_WAIT_MILLISEC〕
- EENOFLAGS
-
このee_rpc_poll_any_replies関数で受信する非同期の応答を特定しません。
- EERPC_SPECIFIC_MSG
-
desに設定した記述子をリターンした,非同期応答型RPCの応答を受信します。
- EERPC_WAIT_MILLISEC
-
timeoutで設定した待ち時間の単位をミリ秒にします。
リターン値
ここで示すリターン値は,TP1/EEが返す値です。サービス関数から返される値ではありません。
リターン値 |
意味 |
---|---|
正の整数 |
受信した非同期応答の記述子を示します。正の整数は,flagsにEENOFLAGSを設定したee_rpc_poll_any_replies関数が正常に終了した場合に返されます。 |
EE_OK |
正常に終了しました。EE_OKは,flagsにEERPC_SPECIFIC_MSGを設定したee_rpc_poll_any_replies関数が正常に終了した場合に返されます。 |
EECOMER_CNDBPP |
オフラインバッチプロセスから発行しているため,この機能は使用できません。 |
EECOMER_CNDUOC |
UOCから発行しているため,この機能は使用できません。 |
EECOMER_ENVIRON |
TP1/EEの環境下にありません。 |
EERPCER_ALL_RECEIVED |
非同期応答型RPCで要求したサービスの処理結果は,すべて受信しました。 |
EERPCER_ARGUMENT |
引数に設定した値が間違っています。 |
EERPCER_CONDITION |
発行条件が不正です。 |
EERPCER_INVALID_DES |
desに指定した記述子は存在しません。このリターン値は,flagsにEERPC_SPECIFIC_MSGを設定した場合に返されます。 |
EERPCER_INVALID_REPLY |
サービス関数によってOpenTP1に返された応答の長さが,1〜EERPC_MAX_MESSAGE_SIZE_EXで定義されている値の範囲にありません。 |
EERPCER_MEMORY_SHORT |
メモリが不足しました。 |
EERPCER_NET_DOWN |
ネットワークに障害が起こりました。 |
EERPCER_NO_BUFS_AT_SERVER |
ee_rpc_call関数の設定したサービスで,メモリが不足しました。 |
ee_rpc_call関数で非トランザクショナルRPC(EERPC_TPNOTRAN指定)の要求先サーバがTP1/EEであり,かつサーバ側のrpc_reply_tp1modeオペランドまたはrpc_reply_tp1mode_downオペランドの設定値がNの場合,サーバ側のトランザクションがコミットしましたが,応答を返せませんでした。応答を返せなかった原因を次に示します。
|
|
EERPCER_NO_BUFS_RB |
メモリが不足しました。このリターン値が返った場合は,トランザクションブランチをコミットできません。 |
EERPCER_NO_SUCH_SERVICE |
ee_rpc_call関数のserviceに設定したサービス名は,定義されていません。 |
サービスの要求先がTP1/EEであり,かつ要求先の転送機能が無効(rpc_loadbalanceオペランドの設定値がN,かつrpc_transfer_othersvgオペランドの設定値がN)の場合は,サービスグループ名不正のおそれがあります。 |
|
EERPCER_NO_SUCH_SERVICE_GROUP |
ee_rpc_call関数のgroupに設定したサービスグループ名は,定義されていません。 |
EERPCER_OLTF_INITIALIZING |
サービスを要求されたノードにあるOpenTP1は,開始処理中です。 |
EERPCER_OLTF_NOT_UP |
ee_rpc_call関数のserviceに設定したサービスがあるノードのOpenTP1が稼働していません。異常終了,停止中,終了処理中,または通信障害が起こったことが考えられます。 |
EERPCER_TIMED_OUT |
ee_rpc_call関数の処理が時間切れ(タイムアウト)になりました。 |
サービスを要求されたSPPが,処理を完了する前に異常終了しました。 |
|
ee_rpc_call関数の非トランザクショナルRPC(EERPC_TPNOTRAN指定)の要求先サーバがTP1/EEであり,かつサーバ側のrpc_reply_tp1mode_downオペランドの設定値がJの場合,サーバ側のトランザクションがロールバック以外です。 |
|
EERPCER_SERVICE_NOT_UP |
ee_rpc_call関数のserviceに設定したサービスのUAPプロセスが,稼働していません。 |
timeoutに-1を指定した場合に,サービスを要求されたSPPが,処理を完了する前に異常終了しました。 |
|
EERPCER_REPLY_TOO_BIG |
返ってきた応答が,クライアントUAPで用意した領域に入り切りません。 |
EERPCER_REPLY_TOO_BIG_RB |
返ってきた応答が,クライアントUAPで用意した領域に入り切りません。このリターン値が返った場合は,トランザクションブランチをコミットできません。 |
EERPCER_SERVER_BUSY |
サービスを要求されたソケット受信型サーバが,サービス要求を受け取れません。 |
EERPCER_SERVICE_CLOSED |
ee_rpc_call関数のserviceに設定したサービス名があるサービスグループは,閉塞しています。 |
EERPCER_SERVICE_TERMINATING |
ee_rpc_call関数のserviceに設定したサービスは,終了処理中です。 |
EERPCER_SYSERR |
システムエラーが起こりました。 |
EERPCER_SYSERR_AT_SERVER |
ee_rpc_call関数の設定したサービスで,システムエラーが起こりました。 |
EERPCER_SYSERR_AT_SERVER_RB |
設定したサービスで,システムエラーが起こりました。このリターン値が返った場合は,トランザクションブランチをコミットできません。 |
EERPCER_SYSERR_RB |
システムエラーが起こりました。このリターン値が返った場合は,トランザクションブランチをコミットできません。 |
EERPCER_TESTMODE |
オンラインテスタを使っている環境で,テストモードのUAPからテストモードでないSPPへサービスを要求しています。または,テストモードでないUAPからテストモードのSPPへサービスを要求しています。 |
EERPCER_TRNCHK |
ノード間負荷バランス機能およびノード間負荷バランス拡張機能の環境で,複数のSPPのトランザクション属性が一致していません。または,負荷を分散する先のノードにあるOpenTP1のバージョンが,クライアントのOpenTP1のバージョンよりも低いため,ノード間負荷バランス機能およびノード間負荷バランス拡張機能を実行できません。 このリターン値は,ノード間負荷バランス機能およびノード間負荷バランス拡張機能を使っているSPPにサービスを要求した場合にだけリターンされます。 |
EERPCER_TRNCHK_EXTEND |
一つのトランザクションブランチから開始できる子トランザクションブランチの最大数を超えたため,トランザクションブランチを開始できません。 |
ee_rpc_call関数で非トランザクショナルRPC(EERPC_TPNOTRAN指定)の要求先サーバがTP1/EEであり,かつサーバ側のrpc_reply_tp1modeオペランドまたはrpc_reply_tp1mode_downオペランドの設定値がNの場合,サーバ側のトランザクションがコミットできませんでした。 |
|
ee_rpc_call関数で非トランザクショナルRPC(EERPC_TPNOTRAN指定)の要求先サーバがTP1/EEであり,かつサーバ側のrpc_reply_tp1mode_downオペランドの設定値がJの場合,サーバ側のトランザクションがロールバックしました。 |
注意事項
-
記述子を特定しないee_rpc_poll_any_replies関数がエラーリターンした場合,エラーとなった応答の記述子を特定できません。ee_rpc_poll_any_replies関数がエラーリターンしたときに該当する記述子がわかるようにしておきたい場合は,flagsにEERPC_SPECIFIC_MSGを設定しておいてください。または,ee_rpc_get_error_descriptor関数を使用することで,エラーリターンした記述子を取得できることもあります。
-
別スレッドで送信した非同期応答型RPC(ee_rpc_call関数のflagsにEERPC_NOWAITを設定)は,この関数で受信できません。非同期応答型RPCは同一スレッドでee_rpc_poll_any_replies関数を使用して受信する必要があります。
-
非同期応答型RPCでサービスを要求したUAPが次に示す関数を呼び出すと,ee_rpc_poll_any_replies関数で応答を受け取れません。
-
ee_rpc_discard_further_replies関数で,非同期応答の受信を拒否した場合
-
トランザクショナルRPCの場合,同期点処理の関数でコミットまたはロールバックしたとき
上記の関数を使ったあとで返ってきた応答は,破棄されます。非同期応答型RPCでは,上記の関数を呼び出す前に,必要な非同期の応答をee_rpc_poll_any_replies関数ですべて受け取ってください。
-