|
|
tprecv(3c)
名前
tprecv()-会話型接続でメッセージを受信するルーチン
形式
#include <atmi.h>
int tprecv(int cd, char **data, long *len, long flags, long \
*revent)
機能説明
tprecv() は、別のプログラムからオープン接続を介してデータを受け取るときに使用します。tprecv() の最初の引数 cd は、データを受け取るオープン接続を指定します。cd には、tpconnect() から返される記述子、あるいは会話サービスに渡される TPSVCINFO パラメータに含まれる記述子のいずれかを指定します。2 番目の引数 data は、tpalloc() によって以前に割り当てられたバッファを指すポインタのアドレスです。
data は、前に tpalloc() が割り当てたバッファへのポインタのアドレスでなければなりません。また、len はlong 型 (tprecv() が受信したデータのサイズに設定する) を指さなければなりません。*data は応答を含んでいるバッファを指し、*len は、バッファのサイズを含みます。FML と FML32 バッファは、通常最小サイズ 4096 バイトを確保します。したがって、応答が 4096 バイトより大きい場合は、バッファ・サイズは返されるデータを入れるのに十分な大きさに拡大します。
容量まで満たされていない送信側のバッファ(例えば、FML および STRING バッファ)は、送信に使用された大きさになります。システムは、受信データのサイズを任意の量で拡大します。これは、受信者が送信者の割り当てたバッファ・サイズより小さく、送信されたデータのサイズより大きいバッファを受け取ることを意味します。
受信バッファのサイズは、増加することも減少することもあります。また、アドレスもシステムがバッファを内部で交換するごとに常に変更されます。応答バッファのサイズが変わったどうか (また変わったとしたらどれくらい変わったのか) を決定するには、tprecv() が *len とともに発行される前に、合計サイズを比べてください。バッファ管理の詳細については、「C 言語アプリケーション・トランザクション・モニタ・インターフェイスについて」を参照してください。
*len が 0 の場合、データは受け取られず、*data も、それが指すバッファも、変更されていません。data、*data または len が NULL であると、エラーになります。
tprecv() は、接続の制御をもたないプログラムしか出せません。
次に、有効な flags の一覧を示します。
マルチスレッドのアプリケーションの場合、TPINVALIDCONTEXT 状態のスレッドは tprecv() の呼び出しを発行できません。
戻り値
revent が TPEV_SVCSUCC または TPEV_SVCFAIL のどちらかに設定されている場合に、tprecv() が終了した場合は、グローバル変数 tpurcode には、tpreturn() の一部として送信されるアプリケーション定義の値が含まれます。
異常終了すると、tprecv() は -1 を返し、tperrno() を設定してエラーの条件を示します。呼び出しが異常終了して tperrno に特定の値が設定されたときは、中間の ATMI 呼び出しを省略して引き続き tperrordetail() を呼び出すと、エラーに関する詳細な情報が提供されます。詳細については、tperrordetail(3c) リファレンス・ページを参照してください。
エラー
異常終了時には、tprecv() は tperrno を次のいずれかの値に設定します。
使用法
サーバは、tpreturn() を呼び出すとき、アプリケーション定義の戻りコードおよび型付きバッファを渡すことができます。戻りコードはグローバル変数 tpurcode で使用され、バッファは data で使用されます。
関連項目
tpalloc(3c)、 tpconnect(3c)、 tpdiscon(3c)、 tperrordetail(3c)、 tpsend(3c)、 tpservice(3c)、 tpstrerrordetail(3c)
|
Copyright © 2001 BEA Systems, Inc. All rights reserved.
|