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

Tuxedo C リファレンス

 Previous Next Contents View as PDF  

tpsend(3c)

名前

tpsend()−会話型接続でメッセージを送信するルーチン

形式

#include <atmi.h>
int tpsend(int
cd, char *data, long len, long flags, long *revent)

機能説明

tpsend() は、別のプログラムにオープン接続を介してデータを送信するときに使用します。このとき、呼び出し元がこの接続を制御できなければなりません。tpsend() の最初の引数 cd は、データを送信するオープン接続を指定するものです。cd には、tpconnect() から返される記述子、あるいは会話型サービスに渡される TPSVCINFO パラメータに含まれる記述子のいずれかを指定します。

2 番目の引数 data は、tpalloc() によって以前に割り当てられたバッファを指していなければなりません。len には送信バッファの大きさを指定します。ただし、data が長さの指定を必要としないバッファを指している場合 (FML フィールド化バッファなど)、len は無視されます (0 でかまいません)。また、data は NULL でもかまいません。この場合、len は無視されます (アプリケーション・データは送信されません。これはデータを送信せず、たとえば接続の制御だけを与えるときに使用されます)。data のタイプとサブタイプは、接続の他方の側が認識するタイプおよびサブタイプと一致していなければなりません。

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

TPRECVONLY

このフラグは、呼び出し元のデータが送信された後、呼び出し元が接続の制御を放棄することを指定します (つまり、呼び出し元はそれ以降、tpsend() 呼び出しを出すことはできなくなります)。接続の他方の側のプログラムが tpsend() から送られたデータを受け取る場合、接続の制御権を得たことを示すイベント (TPEV_SENDONLY) も受け取ります (そして、それ以上、tprecv() を呼び出すことができなくなります)。

TPNOBLOCK

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

TPNOTIME

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

TPSIGRSTRT

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

記述子 cd にイベントが発生すると、tpsend() は正常終了できず、呼び出し元のデータは送信されません。イベントのタイプが revent で返されます。tpsend() の有効なイベントを次に示します。

TPEV_DISCONIMM

会話の従属側が受け取るこのイベントは、その会話の起動元が tpdiscon() により即時切断要求を出したことを、または接続をオープンにしたままで tpreturn() か、tpcommit() か、もしくは tpabort() を出したことを示します。このイベントは、通信エラー (サーバ、マシン、ネットワークの障害など) により接続が切断されたときにも起動元またはその従属側に返されます。

TPEV_SVCERR

会話の起動元が受け取るこのイベントは、その接続の従属側が会話の制御権をもたずに tpreturn() を出したことを示します。さらに、tpreturn() は、TPEV_SVCFAIL について後述している方法とは異なる方法で出されました。このイベントは ACL パーミッション違反によっても発生します。つまり、呼び出し元が受け取り先プロセスに接続するためのパーミッションをもっていないことを示します。このイベントは、tpconnect() が出されるのと同時にではなく、最初の tpsend() と共に (フラグ TPSENDONLY をもった tpconnect() に続いて) 返されるか、または最初の tprecv() と共に (フラグ TPRECVONLY をもった tpconnect() に続いて) 返されます。また、システム・イベントとログ・メッセージも生成されます。

TPEV_SVCFAIL

会話の起動元が受け取るこのイベントは、その接続の従属側が会話の制御権をもたずに tpreturn() を出したことを示します。さらに、tpreturn() は、rval として TPFAIL または TPEXIT を設定し、data として NULL を設定した状態で出されました。

これらのイベントはそれぞれ、即時切断通知 (すなわち、正常ではなくアボート) を示すので、処理途中のデータは失われます。この接続に使用された記述子は無効になります。2 つのプログラムが同じトランザクションに参加していた場合には、そのトランザクションに「アボートのみ」のマークが付けられます。

UBBCONFIG ファイル中の SVCTIMEOUT か、TM_MIB 中の TA_SVCTIMEOUT のどちらか一方が 0 でない場合にサービスのタイムアウトが発生すると、TPESVCERR が返されます。

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

戻り値

TPEV_SVCSUCC または TPEV_SVCFAIL のどららかが revent に設定されて tpsend() が戻った場合、tpurcode() によってポイントされているグローバル変数には、tpreturn() の一部として送信された、アプリケーションで定義した値が入っています。関数 tpsend() はエラー時には -1 を返し、tperrno を設定してエラーの条件を示します。またイベントが存在し、かつエラーが発生しない場合、tpsend() は -1 を返し、tperrno[TPEEVENT] を設定します。

エラー

異常終了時には、tpsend()tperrno を次のいずれかの値に設定します。

[TPEINVAL]

無効な引数が与えられました (たとえば、datatpalloc() によって割り当てられたバッファを指していないか、flags が無効)。

[TPEBADDESC]

cd が無効です。

[TPETIME]

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

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

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

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

[TPEEVENT]

イベントが発生しました。このエラーが発生すると、data は送られません。イベントのタイプが revent で返されます。

[TPEBLOCK]

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

[TPGOTSIG]

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

[TPEPROTO]

tpsend() が不正なコンテキストで呼び出されました (たとえば、呼び出し元がデータの受信しかできないように、接続が確立された場合など)。

[TPESYSTEM]

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

[TPEOS]

オペレーティング・システムのエラーが発生しました。

関連項目

tpalloc(3c)tpconnect(3c)tpdiscon(3c)tprecv(3c)tpservice(3c)

 

Back to Top Previous Next
Contact e-docsContact BEAwebmasterprivacy