BEA Logo BEA Tuxedo Release 8.0

  BEA ホーム  |  イベント  |  ソリューション  |  パートナ  |  製品  |  サービス  |  ダウンロード  |  ディベロッパ・センタ  |  WebSUPPORT

 

   Tuxedoホーム   |   BEA Tuxedo C リファレンス   |   先頭へ   |   前へ   |   次へ   |   目次

 


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 が受け付けるタイプとサブタイプのいずれでもありません。

[TPELIMIT]

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

[TPETRAN]

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

[TPETIME]

タイムアウトが発生しました。呼び出し元がトランザクション・モードの場合は、トランザクション・タイムアウトが発生し、そのトランザクションは「アボートのみ」とマークされます。トランザクション・モードにない場合は、ブロッキング・タイムアウトが発生しており、TPNOBLOCKTPNOTIME も指定されていませんでした。トランザクション・タイムアウトが発生すると、トランザクションがアボートされない限り、新しいリクエストの送信や未処理の応答の受信はできません (ただし、1 つの例外を除く)。これらの操作を行おうとすると、TPETIME が発生して失敗します。1つの例外とは、ブロックされず、応答を期待せず、かつ呼び出し元のトランザクションのために送信されない (つまり、TPNOTRANTPNOBLOCK および TPNOREPLY が設定された状態で tpacall() が呼び出される場合) 要求です。

[TPEBLOCK]

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

[TPGOTSIG]

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

[TPEPROTO]

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

[TPESYSTEM]

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

[TPEOS]

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

関連項目

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

 

先頭へ戻る 前のトピックへ 次のトピックへ