![]() |
![]() |
|
|
メッセージの送受信
BEA Tuxedo システムで会話型接続が確立されると、イニシエータと下位サーバ間の通信は送信呼び出しと受信呼び出しによって行われます。接続の制御を持つプロセスは、tpsend(3c) 関数を使用してメッセージを送信できます。制御がないプロセスは、tprecv(3c) 関数を使用してメッセージを受信できます。
注記 発信元 (クライアント) は、最初に tpconnect() 呼び出しの TPSENDONLY または TPRECVONLY フラグを使用して、どのプロセスが制御を持っているのかを判別します。TPSENDONLY は、発信元が制御を持つことを示します。TPRECVONLY は、呼び出されたサービスに制御が渡されたことを示します。
メッセージの送信
メッセージを送信するには tpsend(3c) 関数を使用します。この関数には、次の文法を使用します。
int
tpsend(int cd, char *data, long len, long flags, long *revent)
次の表は、tpsend() 関数の引数を示しています。
tpsend( ) 関数の引数
tpsend() 関数の呼び出しが失敗すると -1 が返され、対応するエラー・コードが tperrno(5) に設定されます。エラー・コードについては、『BEA Tuxedo C リファレンス』の tpsend(3c) を参照してください。 tpsend() 関数を呼び出すたびに、制御を渡す必要はありません。一部のアプリケーションでは、tpsend() の呼び出しを認められているプロセスが、制御をほかのプロセスに渡すまで、現在のタスクで必要な回数だけ呼び出しを実行できます。ただし、プログラムのロジックによっては、会話が継続する間は常に 1 つのプロセスが接続の制御を持たなければならないアプリケーションもあります。 次のコード例は、tpsend() 関数の呼び出し方法を示しています。 会話モードでのデータ送信 メッセージの受信 オープン接続を介してデータを受信するには、tprecv(3c) 関数を使用します。この関数には、次の文法を使用します。 次の表は、tprecv() 関数の引数を示しています。
if (tpsend(cd,line,0,TPRECVONLY,revent) == -1) {
(void)userlog("%s:tpsend failed tperrno %d",
argv[0],tperrno);
(void)tpabort(0);
(void)tpterm();
exit(1);
}int
tprecv(int cd, char **data, long *len, long flags, long *revent)
処理が成功すると、*data が受信データを指し、len にバッファのサイズが格納されます。len が tprecv() を呼び出す前のバッファの合計サイズより大きい場合、バッファのサイズは変更されていて、len はバッファの新しいサイズを示しています。len 引数が 0 の場合、受信データがないことを示します。
次のコード例は、tprecv() 関数の使用方法を示しています。
会話型でのデータ受信
if (tprecv(cd,line,len,TPNOCHANGE,revent) != -1) {
(void)userlog("%s:tprecv failed tperrno %d revent %ld",
argv[0],tperrno,revent);
(void)tpabort(0);
(void)tpterm();
exit(1);
}
![]() |
![]() |
![]() |
|
Copyright © 2001 BEA Systems, Inc. All rights reserved.
|