4.8.3 tpconnect − 会話型サービスとのコネクションの確立
- 〈この項の構成〉
(1) 形式
(a) TP1/Client/Wの場合
#include <dcvxatmi.h> DCLONG tpconnect(char *svc, char *data, DCLONG len, DCLONG flags)
(b) TP1/Client/Pの場合
#include <dcvxatmi.h> DCLONG tpconnect(char CLTFAR *svc, char CLTFAR *data, DCLONG len, DCLONG flags)
(2) 機能
TP1/Clientと会話型サービスとの間に,コネクションを確立します。確立するコネクションは,半二重型です。関数が正常に処理されると,コネクションを指定するための記述子がリターンされます。
コネクションの確立処理時に,tpconnect関数を発行する側は,受信する側のサービス関数に,指定した情報を渡すことができます。発行する側が情報を渡す場合は,dataにtpalloc関数で割り当てたバッファへのポインタを指定し,lenに送信データの長さを指定します。
会話型サービスをするときに,データを受信するための関数を呼び出さないで,情報を受け取れます。
(3) UAPで値を設定する引数
-
svc
要求するサービスのサービス名を指定します。
-
data
送信データが格納されている型付きバッファへのポインタを指定します。
-
len
送信データの長さを指定します。送信データの最大長は500×1,024バイトです。
長さを指定する必要がない場合は,0を指定してください。長さの指定が必要なバッファの場合,0は指定してはいけません。
-
flags
次に示す値を指定します。
- TPNOTRAN
-
関数を発行する側がトランザクションモードで,かつTPNOTRANを指定している場合,起動されたサービスは,発行する側のトランザクションには属しません。
関数を発行する側がトランザクションモードで,かつサービスがトランザクション処理できないサーバに属している場合は,TPNOTRANを必ず指定します。
関数を発行する側がトランザクションモードの場合は,TPNOTRANが指定されていても,トランザクションタイムアウトが発生します。
TPNOTRANで起動されたサービスが失敗しても,関数を発行する側のトランザクションには影響しません。
- TPSENDONLY
-
関数を発行する側がデータを送信し,関数で起動されたサービスがデータの受信だけを行えるように,コネクションを最初に確立します。関数で起動されたサービスは,最初にコネクションの制御権を取得します。
- TPRECVONLY
-
関数を発行する側はデータを受信し,関数で起動されたサービスがデータの送信だけを行えるように,コネクションを最初に確立します。関数で起動されたサービスは最初にコネクションの制御権を取得します。
TPSENDONLYまたはTPRECVONLYは,どちらかを必ず指定してください。
- TPNOBLOCK
-
ブロッキング状態(送信されたメッセージで内部バッファが満杯になった など)の場合,コネクションは確立されないで,データは送信されません。
TPNOBLOCKが指定されていないで,ブロッキング状態のときは,関数を発行する側は状況が収まるか,タイムアウト(トランザクション,またはブロッキングタイムアウト)が発生するまでブロッキングします。
- TPNOTIME
-
関数を発行する側を無期限にブロックして,ブロッキングタイムアウトが発生しないようにします。
TPNOTIMEを指定しても,トランザクションタイムアウトは発生します。
- TPSIGRSTRT
-
シグナルが実行中のシステムコールを中断した場合に,中断したシステムコールを再び呼びます。
(4) リターン値
正常に完了した場合,tpconnect関数は,確立したコネクションを指定するための記述子をリターンします。エラー時には,-1をリターンし,リターン値としてエラー情報を示す次のどれか一つの値を,tperrnoに設定します。
リターン値 |
意味 |
---|---|
TPEINVAL |
引数に誤りがあります。 |
TPENOENT |
引数に指定された値は,システムで定義されていないため,コネクションを確立できません。 |
TPEITYPE |
引数に指定されている値は,指定したサービスでは使用できません。 |
TPELIMIT |
未解決のコネクションが最大数に達したので,呼び出し側の要求は送信されません。 |
TPETRAN |
指定したサービスがトランザクション処理ができないサーバに属しているのに,TPNOTRANが指定されていません。 |
TPETIME |
タイムアウトが発生しました。
|
TPEBLOCK |
TPNOBLOCKを指定したtpconnect関数を呼び出したときに,ブロッキング状態になりました。 |
TPGOTSIG |
シグナルは受信されましたが,TPSIGRSTRTが指定されていません。 |
TPEPROTO |
tpconnect関数を呼び出すときの状態が適切ではありません。 |
TPESYSTEM |
コミュニケーションリソースマネジャでエラーが発生しました。 |
TPEOS |
オペレーティングシステムでエラーが発生しました。 |
(5) 注意事項
-
OpenTP1では,ブロッキング状態のため通信ができない場合,ネットワークダウンが原因で通信ができない場合と同様に,TPESYSTEMが返されます。
-
OpenTP1では,サービスで使用できない情報を指定した場合,TPESYSTEMが返されます。関数を呼び出した側がトランザクションモードの場合は,トランザクションはロールバックされます。
-
OpenTP1では,X/Openで特に指定されていない場合,トランザクションをロールバックする必要があるエラーはTPESYSTEMです。ただし,TPESYSTEMが返されても,ロールバックされない場合があります。
-
OpenTP1のセキュリティ機能を使用している場合で,サービス要求が認証されなかったときは,TPEPROTOが返されます。UAPトレースの詳細エラーコードで原因を確認してください。
-
TP1/NET/OSI-TP-Extendedを使ったOSI TP通信をする場合は,会話型サービスは使用できません。OSI TP通信で会話型サービスを使用した場合,システムの動作は保証しません。
-
TP1/Clientでは,常設コネクション確立機能を使用して常設コネクションが確立されていないかぎり,tpconnect関数をトランザクション内から発行できません。
-
TP1/Clientでは,トランザクションタイムアウトが発生した場合,CUP実行プロセスが異常終了し,それ以前に確立されていたすべてのコネクションは切断されます。TPETIMEが返されるのは,ブロッキングタイムアウトの場合だけです。
-
TPESYSTEMが返されたとき,TP1/Clientで発生した障害の場合,エラー情報がエラーログに出力されます。
-
リターン値としてTPEOSが返されたとき,メモリ不足が原因の場合があります。TP1/Clientで発生した障害の場合,エラー情報がエラーログに出力されます。