tpgetrply
名称
リクエスト/レスポンス型サービスからの非同期応答の受信
形式
ANSI C,C++の形式
#include <xatmi.h>
int tpgetrply(int *cd,char **data,long *len,long flags)
K&R版 Cの形式
#include <xatmi.h>
int tpgetrply(cd,data,len,flags)
int *cd;
char **data;
long *len;
long flags;
機能
関数tpgetrply()は,先に送信したサービス要求の応答をリターンします。この関数の第1引数のcdは,tpacall()がリターンした記述子へのポインタです。フラグに指定がなければ,この関数は応答が*cdと一致するか,タイムアウトが起こるまで待ちます。
dataは,tpalloc()で事前に割り当てたバッファへのポインタのアドレスを設定してください。lenは必ずlong型を指定してください。これには,tpgetrply()が成功したときに受信したデータ長が設定されます。tpgetrply()は,必要に応じてバッファを確保し直します。成功した場合は,*dataは応答を含むバッファのポインタで,*lenにはデータのサイズが入っています。
『引数』
『●cd
記述子を設定します。』
『●data
受信したデータを格納するバッファへのポインタのアドレスを設定します。』
『●len
受信したデータの長さを格納する領域のアドレスを設定します。』
『●flags』
flagsには,次に示す値を設定します。
以下,特に記述しないかぎり,応答を受信したあとは,*cdは無効になります。
リターン値
tpgetrply()が正常リターンするか,またはtperrnoにTPSVCFAILが設定されてリターンしたとき,アプリケーションがtpreturn()の引数として渡した定義値は,グローバル変数tpurcodeとして参照できます。エラー時には,-1をリターンして,tperrnoにエラーの状態を示す値を設定します。
エラー
次のような場合,tpgetrply()はエラーリターンして,次のうちどれか一つの値をtperrnoに設定します。TPGETANYをflagsに設定していない場合,特に述べなければ,*cdは無効になります。TPGETANYをflagsに設定している場合は,*cdはエラーになった応答の記述子を示します。応答が戻ってくる前にエラーが起こった場合は,*cdは0を指します。特に示さないかぎり,呼び出し側がトランザクション下にあった場合でも,失敗は呼び出し側のトランザクションに影響を与えません。
リターン値 | リターン値(数値) | 意味 |
---|---|---|
TPEBADDESC | 2 | 引数cdが間違った記述子を指しています。 |
TPEBLOCK | 3 | TPNOBLOCKを設定していたときに,ブロッキング状態になりました。*cdは有効なままです。 |
TPEINVAL | 4 | 間違った引数が与えられました(例えば,cd,data,*data,lenがNULL,flagsに設定した値が間違っている)。cdがNULLでない場合は,このエラーのあとも引き続き有効で,応答は解決していない状態のままです。 |
TPEOS | 7 | オペレーティングシステムにエラーが起こりました。厳密なエラーの性質は,product-specificな方法で定義されます。 |
TPEPROTO | 9 | tpgetrply()が間違った状況で呼ばれました。 |
TPESVCERR | 10 | このエラーは,サービス関数を呼び出しているときか,tpreturn()で完了したときに起こります(例えば,適切でない引数を設定した)。このエラーが起こったときは,応答のデータはリターンされません(つまり,*dataも*lenも変更されません)。サービスの応答が呼び出し側のトランザクションとして実行された場合は,トランザクションはrollback_only状態になります。
|
TPESVCFAIL | 11 | 呼び出し側の応答を送信するサービス関数が,TPFAILを設定したtpreturn()を呼び出しました。これは,アプリケーションレベルの失敗です。送信されたサービスの応答の内容は,*dataで指すバッファとして有効になります。サービス要求が呼び出し側の現在のトランザクションとして実行されている場合は,トランザクションはrollback_only状態となります。
|
TPESYSTEM | 12 | コミュニケーションリソースマネジャシステムでエラーが起こりました。厳密なエラーの性質は,product-specificな方法で定義されます。 |
TPETIME | 13 | タイムアウトが起こりました。呼び出し側がトランザクションモードの場合,これはトランザクションタイムアウトで,トランザクションはrollback_only状態となります。そうでない場合は,TPNOBLOCKもTPNOTIMEも設定されていない状態で,ブロッキングタイムアウトが起こったことを意味します。呼び出し側がトランザクションモードでないかぎり(そして,TPGETANYが設定されていないかぎり),引数*cdは有効です。どちらの場合も,*dataも*lenも変わっていません。トランザクションタイムアウトが起こった場合は,トランザクションをロールバックするまでは,新しく送信しようとしていた送信や,解決していない応答は,TPETIMEでエラーリターンします。 |
TPEGOTSIG | 15 | シグナルは受信されましたが,TPSIGRSTRTが設定されていません。 |
TPEOTYPE | 18 | 応答のtypeとsubtypeを,呼び出し側で認識できません。または,TPNOCHANGEのフラグが設定されているのに,*dataで指しているバッファのtypeとsubtypeが,サービスから送信されてきた応答のバッファのtypeとsubtypeに一致していません。このエラーが起こった場合,*dataも*lenも変わっていません。呼び出し側のトランザクションとしてサービス要求が実行されている場合,応答は捨てられて,トランザクションはrollback_only状態となります。 |
関連項目
tpacall(),tpalloc(),tpreturn()
『OpenTP1で使う場合の注意事項』