bea ホーム | 製品 | dev2dev | support | askBEA
BEA Logo Tuxedo
 ドキュメントのダウンロード   サイトマップ   用語集 
検索
0

Tuxedo C リファレンス

 Previous Next Contents View as PDF  

tpacall(3c)

名前

tpacall()−サービス要求の送信を行うルーチン

形式

#include <atmi.h>
int tpacall(char *svc, char *data, long len, long flags)

機能説明

tpacall() は、svc で指定されているサービスに要求メッセージを送ります。この要求は、以前の tpspri() で変更されていないかぎり、svc に対して定義されている優先順位で送信されます。data は、NULL でなければ、tpalloc() が以前に割り当てたバッファを指していなければなりません。len には送信するバッファに入るデータの量を指定します。ただし、data が長さの指定を必要としないバッファを指している場合 (FML フィールド化バッファなど)、len は無視されます (0 でかまいません)。data が NULL であると、len は無視され、要求はデータ部なしで送信されます。data のタイプとサブタイプは、svc が認識するタイプおよびサブタイプと一致しなければなりません。トランザクション・モードにあるときに送信される要求ごとに、最終的には対応する応答が受信されなければならないことに注意してください。

次に、有効な flags の一覧を示します。

TPNOTRAN

呼び出しプロセスがトランザクション・モードにあり、このフラグが設定されていると、svc が呼び出されたときに、このプロセスは呼び出し元のトランザクションの一部として実行されません。svc がトランザクションをサポートしないサーバに属している場合、呼び出し元がトランザクション・モードのときに、このフラグを設定しなければなりません (そうでないと、TPETRAN が返されます)。svc が依然としてトランザクション・モードで起動される場合がありますが、それは同じトランザクションでないことに注意してください。svc は、コンフィギュレーション属性で、自動的にトランザクション・モードで呼び出されるようにすることができます。このフラグを設定するトランザクション・モードの呼び出し元は、トランザクション・タイムアウトの影響を受けます。このフラグを設定して起動したサービスが異常終了した場合、呼び出し元のトランザクションは影響されません。

TPNOREPLY

応答を期待していないことを tpacall() に通知します。TPNOREPLY が設定されると、この関数は正常終了時には 0 を返します。0 は、無効な識別子です。呼び出しプロセスがトランザクション・モードにあるとき、TPNOTRAN が設定されない限りこの設定は使用できません。

TPNOBLOCK

この要求は、ブロッキング条件が存在する場合 (たとえば、メッセージの送信先である内部バッファがいっぱいの場合など) には、送信されません。TPNOBLOCK が指定されていないときにブロッキング条件が存在すると、呼び出し元は、その条件が解消されるか、またはタイムアウト (トランザクションまたはブロッキング) が発生するまではブロックされます。

TPNOTIME

このフラグは、呼び出し元が無制限にブロックでき、ブロッキング・タイムアウトの対象にならないようにすることを指定します。ただし、トランザクション・タイムアウトは発生する可能性があります。

TPSIGRSTRT

シグナルが関数内部のシステム・コールを中断すると、中断されたシステム・コールは出しなおされます。

マルチスレッドのアプリケーションの場合、TPINVALIDCONTEXT 状態のスレッドは、tpacall() の呼び出しを発行できません。

戻り値

正常終了の場合、tpacall() は、送信した要求の応答を受信するために使用できる記述子を返します。

異常終了すると、tpacall() は -1 を返し、tperrno を設定してエラー条件を示します。

エラー

異常終了時には、tpacall()tperrno を次のいずれかの値に設定します(特に記述した場合を除いては、エラーが呼び出し元のトランザクションに影響を及ぼすことはありません)。

[TPEINVAL]

無効な引数が与えられました (たとえば、svc が NULL であったり、datatpalloc() で割り当てられた領域を指していなかったり、あるいは flags が無効です)。

[TPENOENT]

存在しないか、会話型サービスであるか、名前が "." で始まるため、svc に送信できません。

[TPEITYPE]

data のタイプおよびサブ・タイプは、svc が受け付けるタイプあるいはサブ・タイプの 1 つでありません。

[TPELIMIT]

未終了の非同期要求の数が、保持できる最大数に達したため、呼び出し元の要求が送信できませんでした。

[TPETRAN]

svc が、トランザクションをサポートしていないサーバに属しており、TPNOTRAN が設定されていませんでした。

[TPETIME]

このエラー・コードは、タイムアウトが発生したか、または現在のトランザクションがすでに「ロールバックのみ」とマークされているにもかかわらず tpacall() が試行されたことを示します。

呼び出し元がトランザクション・モードにある場合、トランザクションはすでに「ロールバックのみ」になっているか、またはタイムアウトが発生しています (中途終了マークが付けられる)。呼び出し元がトランザクション・モードにない場合、ブロッキング・タイムアウトが発生しています。ブロッキング・タイムアウトは、TPNOBLOCK または TPNOTIME、あるいはその両方を指定した場合は発生しません。

トランザクション・タイムアウトが発生すると、1 つの例外を除き、トランザクションがアボートされない限り、新しいリクエストを送信したり、未処理の応答を受信しようとしても、TPETIME で異常終了します。1 つの例外とは、ブロックされず、応答を期待せず、かつ呼び出し元のトランザクションのために送信されない (つまり、TPNOTRANTPNOBLOCK および TPNOREPLY が設定された状態で tpacall() が呼び出される場合) 要求です。

サービスがトランザクション内部で失敗すると、そのトランザクションは TX_ROLLBACK_ONLY 状態になります。ほとんどの場合、この状態はタイムアウトと同じものとして扱われます。このトランザクションの以降の ATMI 呼び出しは、TPETIME で異常終了します (前の段落で説明した例外を除く)。

[TPEBLOCK]

ブロッキング状態のため、TPNOBLOCK が指定されました。

[TPGOTSIG]

シグナルを受け取りましたが、TPSIGRSTRT が指定されていません。

[TPEPROTO]

tpacall() が不正に呼び出されました。

[TPESYSTEM]

BEA Tuxedo システムのエラーが発生しました。エラーの正確な内容がログ・ファイルに書き込まれます。

[TPEOS]

オペレーティング・システムのエラーが発生しました。リモート・ロケーションにあるメッセージ・キューがいっぱいになった場合には、tpacall() が正常に復帰しても TPEOS が返されます。

関連項目

tpalloc(3c)tpcall(3c)tpcancel(3c)tpgetrply(3c)tpgprio(3c)tpsprio(3c)

 

Back to Top Previous Next
Contact e-docsContact BEAwebmasterprivacy