tpsend
名称
会話型サービスへのメッセージの送信
形式
ANSI C,C++の形式
#include <xatmi.h>
int tpsend(int cd,char *data,long len,long flags,long *revent)
K&R版 Cの形式
#include <xatmi.h>
int tpsend(cd,data,len,flags,revent)
int cd;
char *data;
long len;
long flags;
long *revent;
機能
関数tpsend()は,オープンコネクションをわたって,ほかのプログラムへデータを送信するために使います。呼び出し側は,コネクションの制御権がなくてはなりません。
この関数の第1引数のcdは,データを送信するオープンコネクションを示します。cdは,tpconnect()のリターン値か,会話型サービスに渡されたパラメタ TPSVCINFOで示される記述子です。第2引数のdataは,tpalloc()で事前に割り当てられたバッファへのポインタです。lenにはバッファをどれだけ送信したいかを示します。
『引数』
『●cd
記述子を設定します。』
『●data
送信するデータが格納されたバッファへのポインタを設定します。』
『●len
バッファの長さを設定します。』
『●flags
フラグを示します。』
『●revent
イベントを示すlong型へのポインタを示します。』
flagsには,次に示す値を設定します。
イベント
記述子cdにイベントが存在した場合は,tpsend()は,呼び出し側のデータを送信しないで失敗します。reventにイベントタイプがリターンされます。tpsend()で有効なイベントは次のとおりです。
これらのイベントは,コネクションがすぐに切断されたことを示します(正常終了ではなく異常終了として)。そのため,送信中のデータは失われます。このコネクションに使われている記述子は,無効になります。二つのプログラムが,同じトランザクションにある場合は,そのトランザクションはrollback_only状態になります。
リターン値
エラー時には,tpsend()は-1をリターンして,tperrnoにエラーの状態を示す値を設定します。tpsend()がリターンしてreventにTPEV_SVCFAILが設定される場合,tpurcode外部変数には,tpreturn()の一部でアプリケーションが定義した値を含みます。
エラー
次のような場合,tpsend()はエラーリターンして,次のうちどれか一つの値をtperrnoに設定します。
リターン値 | リターン値(数値) | 意味 |
---|---|---|
TPEBADDESC | 2 | 引数cdが間違った記述子を指しています。 |
TPEBLOCK | 3 | TPNOBLOCKを設定したtpsend()を呼び出したときに,ブロッキング状態になりました。 |
TPEINVAL | 4 | 間違った引数が与えられました(例えば,dataはtpalloc()で割り当てたバッファへのポインタではない,flagsに設定した値が間違っている)。 |
TPEOS | 7 | オペレーティングシステムにエラーが起こりました。厳密なエラーの性質は,product-specificな方法で定義されます。 |
TPEPROTO | 9 | tpsend()が間違った状況で呼ばれました。 |
TPESYSTEM | 12 | コミュニケーションリソースマネジャシステムでエラーが起こりました。厳密なエラーの性質は,product-specificな方法で定義されます。 |
TPETIME | 13 | タイムアウトが起こりました。呼び出し側がトランザクションモードの場合,これはトランザクションタイムアウトで,トランザクションはrollback_only状態となります。そうでない場合は,TPNOBLOCKもTPNOTIMEも設定されていない状態で,ブロッキングタイムアウトが起こったことを意味します。どちらの場合も,*dataとその内容は変わっていません。トランザクションタイムアウトが起こった場合は,トランザクションをロールバックするまでは,どのコネクションでのどのような送信,受信の試みも,また新しくコネクションを開始しようとする試みも,TPETIMEでエラーリターンします。 |
TPEGOTSIG | 15 | シグナルは受信されましたが,TPSIGRSTRTが設定されていません。 |
TPEEVENT | 22 | イベントが起こりました。このエラーが起こったときは,dataは送信されません。そのイベントタイプはreventにリターンされます。 |
関連項目
tpalloc(),tpconnect(),tpdiscon(),tprecv(),tpreturn()
『OpenTP1で使う場合の注意事項』