Hitachi

OpenTP1 Version 7 分散トランザクション処理機能 TP1/EE/Message Control Extension 使用の手引


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オペランド指定値)によって,次の表に示すとおり異なります。

表5‒8 メッセージの最大サイズ拡張有無による送信メッセージ長の違い

メッセージの最大サイズ拡張有無

送信メッセージ長に設定できる最大値(単位:バイト)

TCP/IPプロトコル使用時

UDPプロトコル使用時

なし(msglenオペランドにnormalを指定)

32000

32000

あり(msglenオペランドにextendを指定)

8388608

65531

注※

TP1/EEサービス定義のsend_message_buf_sizeオペランドで指定した送信バッファサイズの方が小さい場合は,send_message_buf_sizeオペランドの指定値が設定されます。

●recvdata

セグメントを受信する領域を設定します。この領域は関数発行元で用意してください。

データ形式については,次の図を参照してください。

図5‒1 受信のデータ形式

[図データ]

●rdataleng

受信したセグメントの長さを格納する領域を設定します。この領域は関数発行元で用意してください。

受信セグメントの長さはrdatalengで指定します。rdatalengで設定される最大値を次の表に示します。

表5‒9 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

メモリ不足が発生しました。

  • 送信バッファ数または受信バッファ数が不足しました。メッセージサイズがOBFサイズまたはIBFサイズを超過しました。

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

受信待ちでコネクション障害が発生しました。

注意事項