Hitachi

OpenTP1 Version 7 分散トランザクション処理機能 OpenTP1 プログラム作成リファレンス COBOL言語編


TPSEND

〈このページの構成〉

名称

会話型サービスへのメッセージの送信

形式

01 TPSVCDEF-REC.
   COPY  TPSVCDEF.
01 TPTYPE-REC.
   COPY  TPTYPE.
01 DATA-REC.
   COPY  Data record definition.
01 TPSTATUS-REC.
   COPY  TPSTATUS.
 
CALL "TPSEND" USING TPSVCDEF-REC TPTYPE-REC DATA-REC TPSTATUS-REC.

機能

TPSENDは,オープンコネクションを渡って,ほかのプログラムへデータを送信するために使います。呼び出し側は,コネクションの制御権がなくてはなりません。COMM-HANDLEには,データを送信するオープンコネクションを設定します。COMM-HANDLEにはTPCONNECTまたはTPSVCSTARTのどちらかから返された通信ハンドルです。

DATA-RECには送信されるデータを設定します。LENにはデータをどれだけ送信したいかを設定します。

Note:DATA-RECが大きさを指定する必要がないレコードの場合は,LENは無視されます(0にしてください)。DATA-RECが大きさを指定する必要があるレコードの場合は,LENは0にできません。REC-TYPEが,subtypeがないデータ型の場合は,SUB-TYPEは無視されます(SPACES(空白)にしてください)。REC-TYPEがSPACES(空白)の場合は,DATA-RECとLENは無視されて,データ部がないメッセージが送信されます(このような使い方をするのは,例えば,データを送信しないで,コネクションの制御を渡したい場合などです)。

『データ領域』

『●TPSVCDEF-REC

TPSENDの動作を示す値と通信ハンドルを設定します。設定する値と意味は,以降説明します。』

『●TPTYPE-REC

送信データのデータ型と,subtypeのレコード名を設定します。』

『●DATA-REC

送信データを示します。』

『●TPSTATUS-REC

TPSENDの実行結果を示すリターン値が設定されます。』

TPSVCDEF-RECには,次に示す値を設定します。

TPRECVONLY

この値は,呼び出し側のデータが送信されたあと,呼び出し側は,コネクションの制御を放棄することを意味します(つまり,呼び出し側は,これ以上TPSENDの呼び出しを実行できません)。コネクションの他端点である受信側が,TPSENDから送信されてきたこのデータを受信したとき,コネクションの制御を示すイベント(TPEV-SENDONLY)も受信します(これ以上,TPRECVの呼び出しを実行できません)。TPRECVONLYまたはTPSENDONLYのどちらかを,必ず設定してください。

TPSENDONLY

この値は,呼び出し側にコネクションの制御を残すことを意味します。TPRECVONLYまたはTPSENDONLYのどちらかを,必ず設定してください。

TPNOBLOCK

ブロッキング状態の場合(例えば,送信されたメッセージで内部バッファが満杯),データやイベントは送信されません。TPNOBLOCKまたはTPBLOCKのどちらかを,必ず設定してください。

TPBLOCK

TPBLOCKを設定していて,ブロッキング状態のときは,呼び出し側は状況が収まるか,タイムアウト(トランザクション,またはブロッキングタイムアウト)が起こるまで,ブロッキングしています。TPNOBLOCKまたはTPBLOCKのどちらかを,必ず設定してください。

TPNOTIME

呼び出し側を無期限にブロックして,ブロッキングタイムアウトが起こらないことを意味します。トランザクションタイムアウトは起こります。TPNOTIMEまたはTPTIMEのどちらかを,必ず設定してください。

TPTIME

ブロッキング状態になった場合に,ブロッキングタイムアウトの時間に達したときにブロッキングタイムアウトの通知を受け取ることを意味します。TPNOTIMEまたはTPTIMEのどちらかを,必ず設定してください。

TPSIGRSTRT

シグナルが実行中のシステムコールを中断したら,中断したシステムコールを再び呼びます。TPSIGRSTRTまたはTPNOSIGRSTRTのどちらかを,必ず設定してください。

TPNOSIGRSTRT

シグナルが実行中のシステムコールを中断したら,中断したシステムコールを再び呼ばないでルーチンは失敗します。TPSIGRSTRTまたはTPNOSIGRSTRTのどちらかを,必ず設定してください。

イベント

COMM-HANDLEにイベントが存在した場合は,TPSENDは,呼び出し側のデータを送信しないで失敗します。TPEVENTにイベントタイプがリターンされます。TPSENDで有効なイベントを次に示します。

TPEV-DISCONIMM

会話のサブオーディネータに受信されるこのイベントは,会話のオリジネータがTPDISCONを実行してコネクションをすぐに切断したか,コネクションをオープンしたままでTPRETURN,TXCOMMIT,またはTXROLLBACKを実行したことを示します。また,このイベントは,通信エラーのためにコネクションが切断された場合(例えば,サーバ,マシン,ネットワークがダウンしたとき),オリジネータ,またはサブオーディネータにリターンされます。

TPEV-SVCERR

会話のオリジネータに受信されるこのイベントは,会話のサブオーディネータが通信の制御権がない状態でTPRETURNを実行していることを示します。TPRETURNは,次に説明するTPEV-SVCFAILとは異なった方法で実行されます。

TPEV-SVCFAIL

会話のオリジネータで受信されるこのイベントは,会話の他端点上のサブオーディネータが通信の制御権がない状態でTPRETURNを実行したことを示します。さらに,TPRETURNはTPFAILコマンドとレコードなしで実行されました(つまり,TPRETURNに渡されたREC-TYPEは,SPACES(空白)だったことを示します)。

これらのイベントは,コネクションがすぐに切断されたことを示します(正常終了ではなく異常終了として)。そのため,送信中のデータは失われます。このコネクションに使われている通信ハンドルは,無効になります。二つのプログラムが,同じトランザクションにある場合は,そのトランザクションはrollback_only状態になります。

リターン値

成功した場合,TPSENDはTP-STATUSにTPOKを設定します。さらに,TP-STATUSにTPEEVENTが返ってTPEVENTがTPEV-SVCFAILの場合は,APPL-RETURN-CODEにはTPRETURNの一部として,アプリケーションが定義した値が返されます。

エラー

次のような場合,TPSENDはエラーリターンして,次のうちどれか一つの値をTP-STATUSに設定します。特に示さないかぎり,失敗は呼び出し側のトランザクションに影響を与えません。

TPEINVAL

間違った引数が与えられました(例えば,TPSVCDEF-RECに設定した値が間違っている)。

TPEBADDESC

COMM-HANDLEに無効な通信ハンドルが設定されています。

TPETIME

タイムアウトが起こりました。呼び出し側がトランザクションモードの場合は,トランザクションタイムアウトになり,トランザクションはrollback_only状態となります。そうでない場合は,TPBLOCKかTPTIMEが設定している状態で,ブロッキングタイムアウトが起こったことを意味します。どちらの場合も,DATA-RECもTPTYPE-RECも変更されていません。トランザクションタイムアウトが起こった場合は,トランザクションをロールバックするまでは,どのコネクションでのどのような送信,受信の試みも,また 新しくコネクションを開始しようとする試みも,TPETIMEでエラーリターンします。

TPEEVENT

イベントが起こりました。そのイベントはTPEVENTに有効な値として設定されました。このエラーが起こったときは,DATA-RECは送信されません。

TPEBLOCK

TPNOBLOCKを設定したTPSENDを実行したときに,ブロッキング状態になりました。

TPEGOTSIG

シグナルは受信されましたが,TPNOSIGRSTRTを設定しています。

TPEPROTO

TPSENDが間違った状況で呼ばれました。

TPESYSTEM

コミュニケーションリソースマネジャシステムでエラーが起こりました。厳密なエラーの性質は,product-specificな方法で定義されます。

TPEOS

オペレーティングシステムにエラーが起こりました。厳密なエラーの性質は,product-specificな方法で定義されます。

関連項目

TPCONNECT,TPDISCON,TPRECV,TPRETURN

『OpenTP1で使う場合の注意事項』

  1. 『該当バージョンのOpenTP1では,TPNOBLOCKの設定は無効となります。そのため,TPEBLOCKがリターンすることはありません。OpenTP1では,ブロッキング状態のため通信ができない場合は,ネットワークダウンが原因で通信ができない場合と同様に,TPESYSTEMをリターンする仕様となっています。』

  2. 『該当バージョンのOpenTP1では,TPNOTIMEの設定は無効となります。』

  3. 『TPSIGRSTRTの設定は無効となります。この設定の有無に関係なく,シグナル受信時には,中断したシステムコールを再び呼びます。TPEGOTSIGがリターンすることはありません。』

  4. 『OpenTP1では,トランザクションタイムアウトが起こったときには,そのプロセスは異常終了します。そのため,TPETIMEがリターンされるのは,ブロッキングタイムアウトの場合だけとなります。』

  5. 『該当バージョンのOpenTP1では,ロールバックする必要があるエラーは,X/Openで特に指定がないかぎり,TPESYSTEMとしています。ただし,TPESYSTEMがリターンしても,rollback_only状態とならない場合もあります。』

  6. 『OpenTP1では,会話の相手がTPDISCON,TPRETURNを実行している場合でも,TPSENDを実行するプロセスでイベントを受信していない場合は,TPSENDでイベントを通知できません。』

  7. 『TP1/NET/OSI-TP-Extendedを使ったOSI TP通信をする場合は,会話型サービスの通信はできません。OSI TP通信で会話型サービスの通信を使った場合,システムの動作は保証しません。』