ee_mcp_sendrecv - 同期型メッセージの送受信
- 〈このページの構成〉
機能
相手システムへ同期送受信メッセージを送信します。同期送受信メッセージは,一つのセグメントで構成されます。
TP1/FSPを使用する場合,アプリケーション定義のeemcpfuncの-oオプションのoutputmessageが設定されている場合,または,ユーザサービス関連定義service_attrの-mオプションが設定されている場合に,送信データをUAP履歴情報のデータ種別「OJ(出力メッセージ)」として取得します。オペランドの関連性については,TP1/FSPの関連ドキュメントを参照してください。
形式
- ANSI C,C++の形式
#include <eemcp.h> int ee_mcp_sendrecv(int action, int commform, char *termnam, char *resv01, char *senddata, int sdataleng, char *recvdata, int *rdataleng, int inbufleng, int *time, int watchtime, int opcd)
UAPで値を設定する引数
●action
送信する論理メッセージのセグメントを次の形式で指定します。
- EEMCPEMI
-
単一セグメントを示すEEMCPEMIを設定します。
●commform
同期型メッセージ送受信を示す,EEMCPIOを設定します。
●termnam
出力先の論理端末名を設定します。論理端末名の長さは最大8バイトです。論理端末名の後ろはNULL文字を付けてください。
●resv01
NULL文字を設定します。
●senddata
送信するセグメントの内容を設定した領域を設定します。送信できる最大長は,sdatalengを参照してください。
- TCP/IPの場合
- UDPの場合
●sdataleng
送信するセグメントの長さを設定します。設定できる最大値は,メッセージの最大サイズを拡張しているかどうか(eemcpfunc定義コマンドの-mオプションのmsglenオペランド指定値)によって,次の表に示すとおり異なります。
メッセージの最大サイズ拡張有無 |
送信メッセージ長に設定できる最大値(単位:バイト) |
|
---|---|---|
TCP/IPプロトコル使用時 |
UDPプロトコル使用時 |
|
なし(msglenオペランドにnormalを指定) |
32000※ |
32000※ |
あり(msglenオペランドにextendを指定) |
8388608 |
65531※ |
●recvdata
セグメントを受信する領域を設定します。この領域は関数発行元で用意してください。
データ形式については,次の図を参照してください。
●rdataleng
受信したセグメントの長さを格納する領域を設定します。この領域は関数発行元で用意してください。
受信セグメントの長さはrdatalengで指定します。rdatalengで設定される最大値を次の表に示します。
メッセージの最大サイズ拡張有無(eemcpfuncコマンドの-mオプションmsglenオペランドの指定) |
受信メッセージ長に設定される最大値(単位:バイト) |
---|---|
なし(normalを指定) |
TP1/EEサービス定義のrecv_message_buf_size(受信バッファサイズ)指定値 |
あり(extendを指定) |
8388608(8M) |
●inbufleng
セグメントを受信する領域の長さを設定します。領域の長さは,図5-1に示すinbuflengを参照してください。
領域の長さは,rdataleng+8バイト以上の長さを設定してください。
●time
メッセージを受信した時刻を格納する領域を設定します。この領域は関数発行元で用意してください。
●watchtime
ee_mcp_sendrecvを呼び出してから終了するまでの最大時間(1〜65535 単位:秒)を設定します。0を設定した場合,MCP共通定義(eemcpcn -b sndrcvtim)で指定した同期送受信監視時間が仮定されます。負の値を設定した場合は,無限に待ち合わせをします。
●opcd
- EENOFLAGS
-
指定した論理端末がすでに送信処理中の場合,送信可能となるまで待ち合わせるときに設定します。待ち合わせている間の時間は,watchtimeに設定した時間に含まれます。
- EEMCP_NOWAIT
-
指定した論理端末がすでに送信処理中の場合,エラーリターンするときに設定します。
TP1/EEから値が返される引数
リターン値がEE_OKまたはEEMCPER_OVERFLOWの場合だけ,次に示すrecvdata,rdataleng,timeの領域は参照可能です。これ以外のリターン値の場合は参照しないでください。
●recvdata
受信したメッセージの先頭アドレスが返されます。
●rdataleng
受信したメッセージの長さが返されます。
●time
メッセージを受信した時刻が,1970年1月1日0時0分0秒からの通算の秒数で返されます。
リターン値
リターン値 |
意味 |
---|---|
EE_OK |
正常に終了しました。 |
EECOMER_ENVIRON |
TP1/EE環境下にありません。 |
EECOMER_CNDUOC |
UOCから発行しているため,この機能は使用できません。 |
EEMCPER_CONDITION |
発行条件が不正です。 |
EEMCPER_MESSAGE_TOO_BIG |
sdatalengに送信できるサイズを超える値を設定しています。 |
EEMCPER_MEMORY_SHORT |
メモリ不足が発生しました。
|
EEMCPER_LE_NAME |
termnamに設定した論理端末名が間違っています。 |
EEMCPER_ACTION |
actionに設定した値が間違っています。 |
EEMCPER_OPTION |
opcdに設定した値が間違っています。 |
EEMCPER_COMMFORM |
commformに設定した値が間違っています。 |
EEMCPER_MESSAGE_TOO_SHORT |
sdatalengに0以下の値を設定しています。 |
EEMCPER_TERM_HOLD |
termnamに設定した論理端末名は閉塞中です。または,メッセージ送信中にコネクションの解放を検知しました。 |
EEMCPER_TIME |
watchtimeに設定した時間が経過しました。 |
EEMCPER_SENDER |
システムに対する送信時に障害が発生しました。 |
EEMCPER_UOC_ERR |
UOCがエラーリターンしました。 |
EEMCPER_UOC_INVALID |
UOCで障害が発生しました。 |
EEMCPER_ARGUMENT |
senddata,recvdata,rdataleng,time,watchtimeに設定した値が間違っています。 |
EEMCPER_OVERFLOW |
inbuflengの指定値を超えるセグメントを受信しました。inbuflengの指定値を超えた部分は切り捨てられました。 |
EEMCPER_INBUFLENG |
inbuflengの指定値が不足しています。9バイト以上の領域を確保してください。 |
EEMCPER_SENDER_RECV |
メッセージ受信が仕掛かり中です。 |
EEMCPER_TERM_IN_USE |
出力先の論理端末は,ほかのUAPで仕掛かり中です。 |
EEMCPER_SENDTIME |
メッセージ送信完了監視タイマ(MCP構成定義eemcpcnの-bオプションsndcmptimオペランドに指定)のタイムアウトが発生しました。 |
EEMCPER_RECVER |
受信待ちでコネクション障害が発生しました。 |
注意事項
-
ee_mcp_send関数発行後,同一UAP内でee_mcp_sendrecv関数を発行した場合,ee_mcp_sendrecv関数のメッセージが先に送信されます。
-
リターン値がEEMCPER_OVERFLOWの場合,rdatalengにはinbuflengの領域に格納できた受信データのサイズが設定されます。
-
TP1/FSPを使用する場合,次のリターン値のときは,OJは取得されません。
EECOMER_ENVIRON,EECOMER_CNDUOC,EEMCPER_CONDITION,EEMCPER_MESSAGE_TOO_BIG,EEMCPER_LE_NAME,EEMCPER_ACTION,EEMCPER_OPTION,EEMCPER_COMMFORM,EEMCPER_MESSAGE_TOO_SHORT,EEMCPER_ARGUMENT,EEMCPER_INBUFLENG