6.3.1 非同期リクエストの送信

tpacall(3c)関数は、サービス・リクエストを送信し、ただちに制御を戻します。tpacall()関数の呼出しには、次のシグネチャを使用します。

int
tpacall(char *svc, char *data, long len, long flags)

表6-2は、tpacall()関数の引数を示しています。

表6-2 tpacall()関数の引数

引数 説明
svc アプリケーションで提供されるサービス名を指すポインタ。
data リクエストのデータ部分のアドレスを含むポインタ。このポインタは、tpalloc()の以前の呼出しで割り当てられた型付きバッファを参照しなければなりません。idatatype (および指定されている場合はsubtype)は、サービス・ルーチンで使用できるtype (および指定されている場合はsubtype)と合致する必要があります。タイプが合致しない場合、tperrnoTPEITYPEが設定され、関数の呼出しが失敗します。データがリクエストされていない場合、dataにNULLポインタを設定します。この設定は、パラメータが無視されうることを意味します。リクエストでデータが送信されない場合、dataのバッファを割り当てる必要はありません。
len dataで参照されるバッファ内のリクエスト・データの長さ。バッファが自己記述型の場合、つまり
FML, FML32, VIEW, VIEW32, X_COMMON, X_C_TYPE,
またはSTRING型バッファの場合、この引数にゼロを設定すると引数が無視されます。
flags フラグのオプション。論理演算子ORを使用すると、複数のフラグをリストできます。この値にゼロを設定すると、デフォルトの方法で通信が行われます。有効なフラグとデフォルト値については、『Oracle Tuxedo ATMI C言語関数リファレンス』「tpacall(3c)」を参照してください。

tpacall()関数は、svcパラメータに指定されたサービスにリクエスト・メッセージを送信し、ただちに制御を戻します。呼出しが正常に終了すると、tpacall()関数は整数値を返します。この値は、関連する要求に対する正しい応答にアクセスするための記述子として使用されます。tpacall()がトランザクション・モードで実行されている場合(「グローバル・トランザクションのコーディング」を参照)、トランザクションのコミット時に未処理の応答が存在することはありません。つまり、あるトランザクションの範囲内では、リクエストごとにその応答が返されるので、最終的には対応する応答を必ず受信することになります。

flags引数にTPNOREPLYが設定されると、応答が必要ないことがtpacall()に通知されます。このフラグが設定されている場合、tpacall()の処理が正常に終了すると、応答記述子として0が返されます。以降の処理で、この値がtpgetrply()関数に渡されると、この値は無効になります。プロセスがトランザクション・モードのときにこのフラグを正しく使用するためのガイドラインについては、「グローバル・トランザクションのコーディング」を参照してください。

エラーが発生した場合、tpacall()-1を返し、tperrno(5)にエラーの原因を示す値を設定します。tpacall()が返すエラー・コードの多くは、tpcall()が返すエラー・コードと同じです。これらの関数のエラー・コードは、一方が同期呼出し、もう一方が非同期呼出しに基づいているという点が異なります。これらのエラーについては、「エラーの管理」を参照してください。