|
|
tpcall(3c)
名前
tpcall()-サービス要求を送信し、その応答を待つルーチン
形式
int tpcall(char *svc, char *idata, long ilen, char **odata, long \
*olen, long flags)
機能説明
tpcall() は、要求を送り、それと同期してその応答を待ちます。この関数への呼び出しは、tpacall() を呼び出した後、即座に tpgetrply() を呼び出すのと同じことです。tpcall() は、svc が指定するサービスに要求を送ります。この要求は、以前の tpspri() で変更されていないかぎり、svc に対して定義されている優先順位で送信されます。要求のデータ部分は、idata によって示されます。これは、あらかじめ tpalloc() によって割り当てられるバッファです。ilen は、送信する idata の大きさを指定します。なお、idata は、長さの指定を必要としないタイプのバッファを指している場合 (たとえば、FML のフィールド化バッファ)、ilen の値は無視されます (あるいは 0) にします。また、idata を NULL にすることもできますが、この場合には、ilen は無視されます。idata のタイプとサブタイプは、svc が認識するタイプおよびサブタイプのいずれかと一致しなければなりません。
odata は、応答が読み込まれるバッファを指すアドレス、olen は、その応答の長さを示します。*odata は、もともと tpalloc() によって割り当てられたバッファを指していなければなりません。同じバッファを送信と受信の両方に使用する場合には、odata を idata のアドレスに設定してください。FML と FML32 バッファは、通常最小サイズ 4096 バイトを確保します。したがって、応答が 4096 バイトより大きい場合には、バッファ・サイズは返されるデータを入れるのに十分な大きさに拡大します。また、tpcall() が呼び出されたときに idata と *odata が同じであり、*odata が変更された場合、idata は有効なアドレスを指しません。古いアドレスの使用は、データの破損やプロセスの例外の原因になります。 リリース 6.4 では、バッファに対するデフォルトの割り当ては 1024 バイトです。また、最近使用したバッファの履歴情報が保持され、最適サイズのバッファをリターン・バッファとして再利用できます。
容量まで満たされていないかもしれない送信者側のバッファ (たとえば、FML または FML32 バッファ) は、送信に使用されたサイズになります。システムは、受信データのサイズを任意の量で拡大します。これは、受信者が送信者の割り当てたバッファ・サイズより小さく、送信されたデータのサイズより大きいバッファを受け取ることを意味します。
受信バッファのサイズは、増加することも減少することもあります。また、アドレスもシステムがバッファを内部で交換するごとに常に変更されます。応答バッファのサイズが変わったどうか (また変わったとしたらどれくらい変わったのか) を決定するには、tpgetrply() が *len とともに発行される前に、合計サイズを比べてください。バッファ管理の詳細については、「C 言語アプリケーション・トランザクション・モニタ・インターフェイスについて」を参照してください。
*olen が戻り時に 0 であると、応答にはデータ部がなく、*odata も、それが指すバッファも変更されていません。*odata または *olen が NULL であると、エラーになります。
次に、有効な flags の一覧を示します。
マルチスレッドのアプリケーションの場合、TPINVALIDCONTEXT 状態のスレッドは tpcall() の呼び出しを発行できません。
戻り値
tpcall() が正常に終了した場合、あるいは tperrno() が TPESVCFAIL に設定されて終了した場合、tpurcode() には、tpreturn() の一部として送信されたアプリケーションが定義した値が入ります。
異常終了すると、tpcall() は -1 を返し、tperrno() を設定してエラー条件を示します。呼び出しが特定の tperrno() 値で異常終了した場合、中間の ATMI 呼び出しを省略して引き続き tperrordetail() を呼び出すと、生成されたエラーの詳細が提供されます。詳細については、tperrordetail(3c) リファレンス・ページを参照してください。
エラー
異常終了時には、tpcall() は tperrno() を次のいずれかの値に設定します(特に指定がない限り、障害は、呼び出し元のトランザクションに影響しません)。
関連項目
tpacall(3c)、tpalloc(3c)、 tperrordetail(3c)、 tpforward(3c)、 tpfree(3c)、 tpgprio(3c)、 tprealloc(3c)、 tpreturn(3c)、 tpsprio(3c)、 tpstrerrordetail(3c)、 tptypes(3c)
|
Copyright © 2001 BEA Systems, Inc. All rights reserved.
|