4.6.3 dc_clt_receive2_s − メッセージの受信(障害時メッセージ受信)
(1) 形式
(a) TP1/Client/Wの場合
■ _s付き関数
#include <dcvclt.h> DCLONG dc_clt_receive2_s(DCCLT_ID cltid, char *buff, DCLONG *recvleng, DCLONG timeout, DCLONG flags)
■ _s無し関数
#include <dcvclt.h> DCLONG dc_clt_receive2(char *buff, DCLONG *recvleng, DCLONG timeout, DCLONG flags)
(b) TP1/Client/Pの場合
■ _s付き関数
#include <dcvclt.h> DCLONG dc_clt_receive2_s(DCCLT_ID cltid, char CLTFAR *buff, DCLONG CLTFAR *recvleng, DCLONG timeout, DCLONG flags)
■ _s無し関数
#include <dcvclt.h> DCLONG dc_clt_receive2(char CLTFAR *buff, DCLONG CLTFAR *recvleng, DCLONG timeout, DCLONG flags)
(2) 機能
MHPが送信したメッセージを受信します。
dc_clt_receive2_s関数を実行する場合,flagsにDCCLT_ONEWAY_RCV,またはDCCLT_SNDRCVを指定したdc_rpc_open_s関数を,あらかじめ実行しておく必要があります。
(3) UAPで値を設定する引数
-
cltid
dc_clt_cltin_s関数で受け取ったクライアントIDを指定します。
-
buff
受信したメッセージを格納する領域を指定します。recvlengで指定する長さ以上の領域を指定してください。
-
recvleng
受信するメッセージの長さを指定します。
-
timeout
メッセージ受信時の最大待ち時間(秒)を指定します。-1から65535の整数を指定してください。
-1を指定した場合は,メッセージを受信するまで無制限に待ちます。
0を指定した場合は,メッセージの受信を待ちません。受信するメッセージがなかった場合は,DCCLTER_TIMED_OUTでエラーリターンします。
1から65535を指定した場合は,指定した秒数だけメッセージの受信を待ちます。指定した秒数を過ぎてもメッセージを受信できない場合は,DCCLTER_TIMED_OUTでエラーリターンします。
-
flags
メッセージを受信後に,コネクションを解放するかどうかを指定します。
DCNOFLAGS:メッセージ受信後,コネクションを解放しません。
DCCLT_RCV_CLOSE:メッセージ受信後,コネクションを解放します。
DCNOFLAGSを指定した場合,dc_rpc_close_s関数を実行するまでコネクションを解放しません。ただし,障害時を除きます。
(4) 値が返される引数
-
buff
受信したメッセージが返されます。
-
recvleng
受信したメッセージの長さが返されます。
(5) リターン値
リターン値 |
数値 (10進数) |
意味 |
---|---|---|
DC_OK |
0 |
正常に終了しました。 |
DCCLTER_INVALID_ARGS |
-2501 |
引数に指定した値が誤っています。 |
DCCLTER_PROTO |
-2502 |
次のどちらかの要因が考えられます。
|
DCCLTER_NO_BUFS |
-2504 |
メモリ不足が発生しました。 |
DCCLTER_NET_DOWN |
-2506 |
ネットワーク障害が発生しました。 |
DCCLTER_TIMED_OUT |
-2507 |
メッセージの受信時にタイムアウトになりました。 |
DCCLTER_SYSERR |
-2518 |
システムエラーが発生しました。 |
DCCLTER_RESOURCE |
-2538 |
資源不足が発生しました。 |
DCCLTER_CONNFREE |
-2542 |
相手システムからコネクションが解放されました。 |
DCCLTER_INVALID_CLTID |
-2544 |
cltidに指定したクライアントIDは,dc_clt_cltin_s関数で受け取ったクライアントIDと異なっています。 |
(6) 注意事項
-
dc_clt_receive2_s関数は,次に示す場合だけ,CUPに制御を戻します。
-
MHPからrecvlengで指定した長さ分のメッセージを受信した場合
指定した長さより短いメッセージを受信してもCUPに制御は戻しません
-
MHPからのメッセージ受信時に,時間切れ(タイムアウト)が発生した場合
-
MHPからコネクションが解放された場合
-
ネットワーク障害が発生した場合
-
-
dc_clt_receive2_s関数の発行時に,MHPからコネクションが解放された場合,DCCLTER_CONNFREEでエラーリターンします。