分散トランザクション処理機能 OpenTP1 クライアント使用の手引 TP1/Client/W,TP1/Client/P編

[目次][索引][前へ][次へ]

4.8.6 tprecv会話型サービスからのメッセージの受信

<この項の構成>
(1) 形式
(2) 機能
(3) UAPで値を設定する引数
(4) リターン値
(5) 注意事項

(1) 形式

(a) TP1/Client/Wの場合
 
#include <dcvxatmi.h>
int tprecv(DCLONG cd, char *CLTFAR *data,
           DCLONG CLTFAR *len,
           DCLONG flags, DCLONG CLTFAR *revent)
 
(b) TP1/Client/Pの場合
 
#include <dcvxatmi.h>
int tprecv(DCLONG cd, char CLTFAR *CLTFAR *data,
           DCLONG CLTFAR *len,
           DCLONG flags, DCLONG CLTFAR *revent)
 
 

(2) 機能

会話型サービスから送信されたデータを受信します。

tprecv関数は,コネクションの制御権を持たない側から発行できます。

tprecv関数が,reventにTPEV_SVCSUCCか,TPEV_SVCFAILを指定してリターンした場合,アプリケーションがtpreturn関数の引数として渡した値は,グローバル変数tpurcodeとして参照できます。

(3) UAPで値を設定する引数

(4) リターン値

エラー時には,tprecv関数は-1をリターンし,リターン値としてエラー情報を示す次のどれか一つの値を,tperrnoに設定します。

リターン値 意味
TPEINVAL 引数に誤りがあります。
TPEBADDESC cdで,誤った記述子を指定しています。
TPEOTYPE 到着したバッファの型を,tprecv関数を呼び出した側で認識していません。または,flagsにTPNOCHANGEを指定しているのに,dataに指定したバッファの型が送信されてきたバッファの型と一致していません。
上記のどちらの場合もdataおよびlenの値は変更されません。tprecv関数を呼び出した側のトランザクションとしてサービスが実行されている場合は,到着したバッファを捨てるまで,トランザクションはロールバックします。
上記のエラー発生時,指定されたイベントは捨てられ,サービスの処理結果は未決着になります。発行側では,すぐにサービスを終了してください。
TPETIME タイムアウトが発生しました。
  • 発行側がトランザクションモードの場合
    トランザクションタイムアウトが発生しました。トランザクションはロールバックされます。
    トランザクションタイムアウトが発生した場合は,トランザクションをロールバックするまでの間,新規のデータ送信,および未決着の応答に対して,TPETIMEが返されます。
  • トランザクションモード以外の場合
    TPNOBLOCKおよびTPNOTIMEがどちらも指定されていない状態で,ブロッキングタイムアウトが発生しました。
上記のどちらの場合も,dataに指定した値は変更されません。
TPEEVENT イベントが発生しました。リターン値はreventに返されます。
TPEBLOCK TPNOBLOCKを指定したtprecv関数を呼び出したときに,ブロッキング状態になりました。
TPGOTSIG シグナルは受信されましたが,TPSIGRSTRTを指定していません。
TPEPROTO tpdiscon関数を呼び出したときの状態が適切ではありません。
TPESYSTEM コミュニケーションリソースマネジャでエラーが発生しました。
TPEOS オペレーティングシステムでエラーが発生しました。

(5) 注意事項