TPCONNECT
形式
01 TPSVCDEF-REC. COPY TPSVCDEF. 01 TPTYPE-REC. COPY TPTYPE. 01 DATA-REC. COPY Data record definition. 01 TPSTATUS-REC. COPY TPSTATUS. CALL "TPCONNECT" USING TPSVCDEF-REC TPTYPE-REC DATA-REC TPSTATUS-REC.
機能
TPCONNECTは,会話型サービスであるSERVICE-NAMEに,半二重型の通信路を設定します。
コネクションを確立する処理の一部として,呼び出し側は受信側のサービスプログラムへ,アプリケーションが定義したデータを渡せます。呼び出し側がデータを渡す場合は,DATA-RECはデータを含んでいて,LENにはどれぐらいのデータを送信するかを設定します。
- 注
-
DATA-RECが,長さを指定する必要がないレコードを指す場合は,LENは無視されます(0にしてください)。DATA-RECが,長さを指定する必要があるレコードを指す場合は,LENには0を設定しないでください。REC-TYPEにsubtypeがない場合は,SUB-TYPEは無視されます(SPACES(空白)にしてください)。REC-TYPEがSPACES(空白)の場合は,DATA-RECとLENは無視されます(会話型サービスにはアプリケーションデータは送信されません)。DATA-RECのREC-TYPEとSUB-TYPEは,SERVICE-NAMEで認識するtypeとsubtypeのうちのどれか一つに必ず一致させてください。
TPSVCSTARTが成功してリターンした会話型サービスは,DATA-RECとLENをTPSVCSTARTで受信します。そのため会話型サービスは,TPCONNECTから送られたデータを受信するためにTPRECVを呼ぶ必要はありません。
『データ領域』
『●TPSVCDEF-REC
TPCONNECTの動作を示す値を設定します。ここに設定した値によって,リターンする値が決まります。設定する値と意味は,以降説明します。』
『●TPTYPE-REC
送信データのデータ型と,subtypeのレコード名を示します。』
『●DATA-REC
送信データを示します。』
『● TPSTATUS-REC
TPCONNECTの実行結果を示すリターン値が設定されます。』
TPSVCDEF-RECには,次に示す値を設定します。
- TPNOTRAN
-
呼び出し側がトランザクションモードで,かつ この値を設定している場合,起動されたSERVICE-NAMEは,呼び出し側のトランザクションの一部にはなりません。呼び出し側がトランザクションモードで,かつ SERVICE-NAMEがトランザクション処理ができないサーバに属している場合は,この値を必ず設定してください。呼び出し側がトランザクションモードであれば,この値が設定されていても,トランザクションタイムアウトは起こります(トランザクションモードでなければ起こりません)。この値を設定して起動されたサービスが失敗しても,呼び出し側のトランザクションには影響しません。TPNOTRANまたはTPTRANのどちらかを,必ず設定してください。
- TPTRAN
-
呼び出し側がトランザクションモードで,かつ この値を設定している場合,起動されたSERVICE-NAMEは,呼び出し側のトランザクションの一部になります。呼び出し側がトランザクションモードでない場合は,この値を設定しても無視されます。TPNOTRANまたはTPTRANのどちらかを,必ず設定してください。
- TPSENDONLY
-
呼び出し側がデータを送信して,呼ばれたサービスがデータの受信だけできるように,コネクションを最初に確立します(つまり,呼び出し側が最初にコネクションの制御権を得ます)。TPSENDONLYまたはTPRECVONLYのどちらかを,必ず設定してください。
- TPRECVONLY
-
呼び出し側はデータを受信するだけで,呼ばれたサービスがデータの送信だけできるように,コネクションを最初に確立します(つまり,呼び出されたサービス側が最初にコネクションの制御権を得ます)。TPSENDONLYまたはTPRECVONLYのどちらかを,必ず設定してください。
- TPNOBLOCK
-
ブロッキング状態の場合(例えば,送信されたメッセージで内部バッファが満杯),コネクションは確立されないで,データは送信されません。TPNOBLOCKまたはTPBLOCKのどちらかを,必ず設定してください。
- TPBLOCK
-
TPBLOCKを設定していて,ブロッキング状態のときは,呼び出し側は状況が収まるか,タイムアウト(トランザクション,またはブロッキングタイムアウト)が起こるまで,ブロッキングしています。TPNOBLOCKまたはTPBLOCKのどちらかを,必ず設定してください。
- TPNOTIME
-
呼び出し側を無期限にブロックして,ブロッキングタイムアウトが起こらないことを意味します。トランザクションタイムアウトは起こります。TPNOTIMEまたはTPTIMEのどちらかを,必ず設定してください。
- TPTIME
-
ブロッキング状態になった場合に,ブロッキングタイムアウトの時間に達したときにブロッキングタイムアウトの通知を受け取ることを意味します。TPNOTIMEまたはTPTIMEのどちらかを,必ず設定してください。
- TPSIGRSTRT
-
シグナルが実行中のシステムコールを中断したら,中断したシステムコールを再び呼びます。TPSIGRSTRTまたはTPNOSIGRSTRTのどちらかを,必ず設定してください。
- TPNOSIGRSTRT
-
シグナルが実行中のシステムコールを中断したら,中断したシステムコールを再び呼ばないでルーチンは失敗します。TPSIGRSTRTまたはTPNOSIGRSTRTのどちらかを,必ず設定してください。
リターン値
成功した場合,TPCONNECTはTP-STATUSにTPOKを設定します。さらに,COMM-HANDLEに有効な通信ハンドルをリターンします。この通信ハンドルは,次の呼び出しがコネクションを参照するために使います。
エラー
次のような場合,TPCONNECTはエラーリターンして,次のうちどれか一つの値をTP-STATUSに設定します。特に示さないかぎり,失敗は呼び出し側のトランザクションに影響を与えません。
- TPEINVAL
-
間違った引数が与えられました(例えば,TPSVCDEF-RECに設定した値が間違っている)。
- TPENOENT
-
SERVICE-NAMEで示すサービスが存在しないので,コネクションを確立できません。
- TPEITYPE
-
DATA-RECのtypeとsubtypeが,SERVICE-NAMEで使える形式ではありません。
- TPELIMIT
-
未解決のコネクションが最大数に達したので,呼び出し側の要求は送信されません。
- TPETRAN
-
SERVICE-NAMEがトランザクション処理ができないサーバに属しているのに,TPTRANを設定しています。
- TPETIME
-
タイムアウトが起こりました。呼び出し側がトランザクションモードの場合,これはトランザクションタイムアウトで,トランザクションはrollback_only状態になります。そうでない場合は,TPNOBLOCKもTPNOTIMEも設定されていない状態で,ブロッキングタイムアウトが起こったことを意味します。トランザクションタイムアウトが起こった場合は,トランザクションをロールバックするまでは,どのコネクションでのどのような送信,受信の試みも,TPETIMEでエラーリターンします。
- TPEBLOCK
-
TPNOBLOCKを設定したTPCONNECTを実行したときに,ブロッキング状態になりました。
- TPEGOTSIG
-
シグナルは受信されましたが,TPNOSIGRSTRTを設定しています。
- TPEPROTO
-
TPCONNECTが間違った状況で呼ばれました。
- TPESYSTEM
-
コミュニケーションリソースマネジャシステムでエラーが起こりました。厳密なエラーの性質は,product-specificな方法で定義されます。
- TPEOS
-
オペレーティングシステムにエラーが起こりました。厳密なエラーの性質は,product-specificな方法で定義されます。
関連項目
TPDISCON,TPRECV,TPSEND,TPSVCSTART
『OpenTP1で使う場合の注意事項』
-
『該当バージョンのOpenTP1では,TPNOBLOCKの設定は無効となります。そのため,TPEBLOCKがTP-STATUSにリターンすることはありません。OpenTP1では,ブロッキング状態のため通信ができない場合は,ネットワークダウンが原因で通信ができない場合と同様に,TPESYSTEMをリターンする仕様となっています。』
-
『該当バージョンのOpenTP1では,TPNOTIMEの設定は無効となります。』
-
『TPSIGRSTRTの設定は無効となります。この設定の有無に関係なく,シグナル受信時には,中断したシステムコールを再び呼びます。TPEGOTSIGがリターンすることはありません。』
-
『該当バージョンのOpenTP1では,TPEITYPEはリターンされません。SERVICE-NAMEで使えない型のレコードを渡した場合,TPESYSTEMまたはTPESVCERRがリターンされます。呼び出し側がトランザクションモードの場合は,rollback_only状態となります。』
-
『OpenTP1では,トランザクションタイムアウトが起こったときには,そのプロセスは異常終了します。そのため,TPETIMEがリターンされるのは,ブロッキングタイムアウトの場合だけとなります。』
-
『該当バージョンのOpenTP1では,ロールバックする必要があるエラーは,X/Openで特に指定がないかぎり,TPESYSTEMとしています。ただし,TPESYSTEMがリターンしても,rollback_only状態とならない場合もあります。』
-
『OpenTP1のセキュリティ機能を使っている場合で,サービス要求が認証されなかったときは,TPEPROTOでエラーリターンします。サービス要求が認証されなかったことが原因かどうかは,UAPトレースの詳細情報で確認してください。』
-
『TP1/NET/OSI-TP-Extendedを使ったOSI TP通信をする場合は,会話型サービスの通信はできません。OSI TP通信で会話型サービスの通信を使った場合,システムの動作は保証しません。』
-
『サーバAPが閉塞状態の場合は,ローカルノードの要求先SPPが閉塞しているか,リモートノードの要求先SPPが閉塞しているかによって,次のように動作します。
- ローカルノードの要求先SPPが閉塞しているとき
-
tpconnect()は-1を返し,tperrnoにTPEPROTOが設定されます。
- リモートノードの要求先SPPが閉塞しているとき
-
トランザクションモードであれば,トランザクションタイムアウトでサーバAPが異常終了します。
非トランザクションモードであれば,tpconnect()は-1を返し,tperrnoにTPETIMEが設定されます。』