OpenTP1 Version 7

分散トランザクション処理機能

OpenTP1 プロトコル TP1/NET/User Datagram Protocol編

解説・手引・文法・操作書

3000-3-D75

目　　次

前書き

はじめに

1.　概要

1.1　AP間通信の概要

1.2　AP間通信の形態

1.3　ソフトウェアの構成

1.3.1　前提プログラム

1.3.2　ソフトウェア構成の例

2.　機能

2.1　AP間通信の仕組み

2.1.1　論理端末の閉塞解除と閉塞

2.1.2　論理端末とアプリケーションの型の関係

2.1.3　通信相手のアドレスの指定

2.1.4　AP間通信の注意事項

2.2　AP間通信メッセージの送受信

2.2.1　一方送信メッセージの送信

2.2.2　一方送信メッセージの受信

2.2.3　同期型メッセージの送信

2.2.4　送受信するメッセージのデータ形式

2.2.5　アプリケーション名の決定

3.　メッセージ送受信インタフェース

メッセージ送受信インタフェースの一覧

dc_mcf_receive － 一方送信メッセージの受信（C言語）

dc_mcf_resend － メッセージの再送（C言語）

dc_mcf_send － 一方送信メッセージの送信（C言語）

dc_mcf_sendsync － 同期型メッセージの送信（C言語）

CBLDCMCF('RECEIVE ') － 一方送信メッセージの受信（COBOL言語）

CBLDCMCF('RESEND ') － メッセージの再送（COBOL言語）

CBLDCMCF('SEND ') － 一方送信メッセージの送信（COBOL言語）

CBLDCMCF('SENDSYNC') － 同期型メッセージの送信（COBOL言語）

RECEIVE － メッセージの受信（データ操作言語）

SEND － メッセージの送信（データ操作言語）

ユーザアプリケーションプログラム作成例

4.　ユーザオウンコーディング，MCFイベントインタフェース

4.1　ユーザオウンコーディングインタフェース

4.1.1　入力メッセージの編集とアプリケーション名の決定

4.1.2　入力メッセージ編集UOCインタフェース

4.1.3　出力メッセージの編集

4.1.4　出力メッセージ編集UOCインタフェース

4.1.5　送信メッセージの通番編集

4.1.6　送信メッセージの通番編集UOCインタフェース

4.1.7　UOC作成上の注意事項

4.2　MCFイベントインタフェース

4.2.1　MCFイベントの種類

4.2.2　MCFイベント通知時のセグメント構成

4.2.3　MCFイベント情報の形式（C言語）

4.2.4　MCFイベント情報の形式（COBOL言語）

5.　システム定義

TP1/NET/UDPの定義の概要

TP1/NET/UDP固有のシステム定義の種類

mcftalcle（論理端末定義の開始）

mcftalced（論理端末定義の終了）

システムサービス情報定義

システムサービス共通情報定義

MCF定義オブジェクトの生成

定義例

6.　運用コマンド

TP1/NET/UDPの運用コマンド

mcftactle（論理端末の閉塞解除）

mcftdctle（論理端末の閉塞）

mcftlsle（論理端末の状態表示）

7.　組み込み方法

7.1　TP1/NET/UDPの組み込みの流れ

7.2　MCFメイン関数の作成

7.3　定義オブジェクトファイルの生成

8.　障害対策

8.1　障害の種類と対応処理

付録

付録A　メッセージ送受信の処理の流れ

付録B　障害発生時の処理の流れ

付録C　理由コード一覧

付録D　旧製品からの移行に関する注意事項

付録E　バージョンアップ時の変更点

付録E.1　07-00での変更点

付録E.2　06-02での変更点

付録F　用語解説

索引

[他社商品名称に関する表示]

All Rights Reserved. Copyright (C) 2007, Hitachi, Ltd.

前書き

■ 対象製品

・適用OS：AIX 5L V5.1，AIX 5L V5.2，AIX 5L V5.3

P-1M64-3131　 uCosminexus TP1/Message Control　 07-00
P-1M64-3231　 uCosminexus TP1/NET/Library　 07-00
P-F1M64-3231U　 uCosminexus TP1/NET/User Datagram Protocol　 07-00

・適用OS：Red Hat Enterprise Linux AS 4，Red Hat Enterprise Linux ES 4（x86，AMD64，Intel EM64T）

P-9S64-3151　 uCosminexus TP1/Message Control　 07-00
P-9S64-3251　 uCosminexus TP1/NET/Library　 07-00
P-F9S64-3251U　 uCosminexus TP1/NET/User Datagram Protocol　 07-00

・適用OS：Red Hat Enterprise Linux AS 4（IPF）

P-9V64-3121　 uCosminexus TP1/Message Control　 07-00
P-9V64-3221　 uCosminexus TP1/NET/Library　 07-00
P-F9V64-3221U　 uCosminexus TP1/NET/User Datagram Protocol　 07-00

・適用OS：Red Hat Enterprise Linux 5.1 Advanced Platform，Red Hat Enterprise Linux 5.1 (x86，AMD64，Intel EM64T)

P-9S64-3161　 uCosminexus TP1/Message Control　 07-00※
P-9S64-3261　 uCosminexus TP1/NET/Library　 07-00※
P-F9S64-3261U　 uCosminexus TP1/NET/User Datagram Protocol　 07-00※

・適用OS：Red Hat Enterprise Linux 5.1 Advanced Platform，Red Hat Enterprise Linux 5.1 (IPF)

P-9V64-3131　 uCosminexus TP1/Message Control　 07-00※
P-9V64-3231　 uCosminexus TP1/NET/Library　 07-00※
P-F9V64-3231U　 uCosminexus TP1/NET/User Datagram Protocol　 07-00※

これらのプログラムプロダクトのほかにも，このマニュアルをご利用になれる場合があります。詳細は「リリースノート」でご確認ください。
これらの製品は，ISO9001およびTickITの認証を受けた品質マネジメントシステムで開発されました。
※印のプログラムプロダクトについては，発行時期をご確認ください。

■ 輸出時の注意

本製品を輸出される場合には，外国為替および外国貿易法ならびに米国の輸出管理関連法規などの規制をご確認の上，必要な手続きをお取りください。
なお，ご不明な場合は，弊社担当営業にお問い合わせください。

■ 商標類

AIXは，米国における米国International Business Machines Corp.の登録商標です。
AMDは，Advanced Micro Devices, Inc.の商標です。
Ethernetは，米国Xerox Corp.の商品名称です。
Itaniumは，アメリカ合衆国および他の国におけるインテルコーポレーションまたはその子会社の登録商標です。
Linuxは，Linus Torvaldsの米国およびその他の国における登録商標あるいは商標です。
Red Hatは，米国およびその他の国でRed Hat,Inc.の登録商標若しくは商標です。
UNIXは，X/Open Company Limited が独占的にライセンスしている米国ならびに他の国における登録商標です。

■ 発行

2007年12月（第1版）3000-3-D75

■ 著作権

All Rights Reserved. Copyright (C) 2007, Hitachi, Ltd.

はじめに

このマニュアルは，TP1/NET/User Datagram Protocolの概要，機能，操作，および運用について説明したものです。

本文中に記載されている製品のうち，このマニュアルの対象製品ではない製品については，OpenTP1 Version 7対応製品の発行時期をご確認ください。

対象読者

OpenTP1システムの通信にUser Datagram Protocol（UDPプロトコル）を使用するシステム管理者，システム設計者，およびプログラマを対象としています。また，オンラインやOpenTP1システムの基礎的な知識を持っていて，次のマニュアルを理解されていることを前提としています。

OpenTP1 解説 （3000-3-D50）

OpenTP1 プログラム作成の手引 （3000-3-D51）

OpenTP1 システム定義 （3000-3-D52）

OpenTP1 運用と操作 （3000-3-D53）

OpenTP1 プログラム作成リファレンス C言語編 （3000-3-D54）

OpenTP1 プログラム作成リファレンス COBOL言語編 （3000-3-D55）

マニュアルの構成

このマニュアルは，次に示す章と付録から構成されています。

第1章　概要

TP1/NET/User Datagram Protocol（TP1/NET/UDP）の概要について説明しています。

第2章　機能

TP1/NET/UDPでの論理端末の運用，メッセージの種類と送受信の方法などについて説明しています。

第3章　メッセージ送受信インタフェース

TP1/NET/UDPを使用してメッセージを送受信するUAPの作成方法，および作成例について説明しています。

第4章　ユーザオウンコーディング，MCFイベントインタフェース

TP1/NET/UDPに関連するユーザオウンコーディング，およびMCFイベントインタフェースについて説明しています。

第5章　システム定義

UDPプロトコルを使用するために必要な，OpenTP1のシステム定義の中でのTP1/NET/UDP固有のシステム定義，およびシステム定義例について説明しています。

第6章　運用コマンド

TP1/NET/UDPで使用する運用コマンドについて説明しています。

第7章　組み込み方法

TP1/NET/UDPをOpenTP1システムに組み込む方法について説明しています。

第8章　障害対策

TP1/NET/UDPの運用中に発生するおそれがある障害と，TP1/NET/UDPの対応処理について説明しています。

付録A　メッセージ送受信の処理の流れ

メッセージを送受信するときのデータの流れ，ジャーナル取得のタイミングについて説明しています。

付録B　障害発生時の処理の流れ

障害発生時の処理の流れについて説明しています。

付録C　理由コード一覧

障害通知イベントが発生した場合の理由コードについて説明しています。

付録D　旧製品からの移行に関する注意事項

バージョン6以前からバージョン7に移行する際の注意事項について説明しています。

付録E　バージョンアップ時の変更点

各バージョンでの変更点について説明しています。

付録F　用語解説

TP1/NET/UDPで使用する用語について説明しています。

関連マニュアル

読書手順

このマニュアルは，利用目的に合わせて章を選択して読むことができます。利用目的別に，次の流れに従ってお読みいただくことをお勧めします。

図中で使用する記号

このマニュアルの図中で使用する記号を，次のように定義します。

文法の記号

このマニュアルで使用する各種の記号を説明します。

（1）文法記述記号

文法の記述形式について説明する記号です。

文法記述記号
意味

〔　〕
この記号で囲まれている項目は省略できることを示します。

（例）〔-v アプリケーション名〕

-vオプションとそのオペランドを指定するか，何も指定しないことを示します。

｜
（ストローク）
この記号で区切られた項目は選択できることを示します。

（例）-i auto｜manual

-iオプションにautoかmanualを指定できることを示します。

ただし，C言語のインタフェースの説明でこの記号を使用した場合は，C言語の文法規則に従います。

｛　｝
この記号で囲まれている複数の項目のうちから一つを選択できることを示します。

（例）｛DCMCFFRST｜DCMCFSEG｝

DCMCFFRSTとDCMCFSEGのうち，どちらかを指定できることを示します。

＿
（下線）
この記号で示す項目は，オペランド，オプションまたはコマンド引数を省略した場合の省略時解釈値を示します。

（例）-i auto｜manual

-iオプションを省略した場合，manualを省略時解釈値とすることを示します。

ただし，データ操作言語の説明の場合，この下線記号で示す予約語は，必要語なので省略できないことを示します。
下線がない予約語は，補助語なので書いても書かなくてもかまいません。

…
この記号で示す直前の一つの項目を繰り返し指定できることを示します。
ただし，項目が括弧で囲まれている場合，括弧全体が一つの項目となります。

△
（白三角）
空白を示します。

（例）論理端末名称1△論理端末名称2

論理端末名称1と論理端末名称2の間に，空白を1個入力することを示します。

（2）属性表示記号

ユーザ指定値の範囲などを説明する記号です。

属性表示記号 | 意味
～ | この記号のあとにユーザ指定値の属性を示します。
《　　》 | ユーザが指定を省略したときの省略時解釈値を示します。
＜　　＞ | ユーザ指定値の構文要素を示します。
((　　)) | ユーザ指定値の指定範囲を示します。

（3）構文要素記号

ユーザ指定値の内容を説明する記号です。

構文要素記号
意味

＜英字＞
アルファベット（A～Z，a～z）と_（アンダスコア）

＜英字記号＞
アルファベット（A～Z，a～z）と＃，＠，¥

＜英数字＞
英字と数字（0～9）

＜英数字記号＞
英字記号と数字（0～9）

＜符号なし整数＞
数字列（0～9）

＜10進数字＞
数字（0～9）

＜16進数字＞
数字（0～9）と（A～F，a～f）

＜識別子＞
先頭がアルファベットの英数字列

＜記号名称＞
先頭が英字記号の英数字記号列

＜文字列＞
任意の文字の配列

＜パス名＞
記号名称，／，および.（ピリオド）
（ただし，パス名は使用するOSに依存）

＜ホスト名＞
先頭が英数字，または-（ハイフン）で，
先頭以外が英数字，-（ハイフン），および.（ピリオド）

このマニュアルでの表記

（1）製品名

このマニュアルで使用する製品名称の略称を次に示します。

製品名称 | 略称
AIX 5L V5.1 | AIX
AIX 5L V5.2
AIX 5L V5.3
Itanium(R) Processor Family | IPF
uCosminexus TP1/Message Control | TP1/Message Control
uCosminexus TP1/Message Control Tester | TP1/Message Control/Tester
uCosminexus TP1/NET/Library | TP1/NET/Library
uCosminexus TP1/NET/User Datagram Protocol | TP1/NET/UDP
Red Hat Enterprise Linux AS 4 | Linux 4 | Linux
Red Hat Enterprise Linux AS 4 (IPF)
Red Hat Enterprise Linux ES 4 (x86)
Red Hat Enterprise Linux ES 4 (AMD64)
Red Hat Enterprise Linux ES 4 (Intel EM64T)
Red Hat Enterprise Linux 5.1 (IPF) | Linux 5.1
Red Hat Enterprise Linux 5.1 (x86)
Red Hat Enterprise Linux 5.1 (AMD64)
Red Hat Enterprise Linux 5.1 (Intel EM64T)
Red Hat Enterprise Linux 5.1 Advanced Platform
Red Hat Enterprise Linux 5.1 Advanced Platform (IPF)

AIXおよびLinuxを総称してUNIXと表記しています。

（2）アーキテクチャによる違いについて

このマニュアルでは，32ビットアーキテクチャ対応OSと64ビットアーキテクチャ対応OSで記述を書き分けている個所があります。ご使用のOSをご確認の上，アーキテクチャに応じた記載個所をお読みください。

次の表に，このマニュアルでのアーキテクチャの違いによる表記と対応OSを示します。

マニュアルの表記
OS

32ビットアーキテクチャの場合

AIX 5L V5.1，AIX 5L V5.2，AIX 5L V5.3

Red Hat Enterprise Linux AS 4，Red Hat Enterprise Linux ES 4 (x86，AMD64，Intel EM64T)

Red Hat Enterprise Linux 5.1 Advanced Platform，Red Hat Enterprise Linux 5.1(x86，AMD64，Intel EM64T)

64ビットアーキテクチャの場合

Red Hat Enterprise Linux AS 4 (IPF)

Red Hat Enterprise Linux 5.1 Advanced Platform (IPF)，Red Hat Enterprise Linux 5.1(IPF)

（3）JISコード配列のキーボードとASCIIコード配列のキーボードとの違いについて

JISコード配列とASCIIコード配列では，次に示すコードで入力文字の違いがあります。このマニュアルの文字入力例（コーディング例）の表記は，JISコード配列（日本語のキーボード）に従った文字に統一しています。

コード | JISコード配列 | ASCIIコード配列
(5c)₁₆ | '￥'（円記号） | '＼'（バックスラッシュ）
(7e)₁₆ | '￣'（オーバライン） | '～'（チルド）

略語一覧

このマニュアルで使用する英略語の一覧を次に示します。

英略語 | 英字での表記
AP | Application Program
FDDI | Fiber Distributed Data Interface
IP | Internet Protocol
LAN | Local Area Network
MCF | Message Control Facility
MHP | Message Handling Program
MTU | Maximum Transmission Unit
OS | Operating System
SPP | Service Providing Program
TTL | Time to Live
UAP | User Application Program
UOC | User Own Cording

常用漢字以外の漢字の使用について

このマニュアルでは，常用漢字を使用することを基本としていますが，次に示す用語については，常用漢字以外の漢字を使用しています。

個所（かしょ）　閉塞（へいそく）

KB（キロバイト）などの単位表記について

1KB（キロバイト），1MB（メガバイト），1GB（ギガバイト），1TB（テラバイト）はそれぞれ1,024バイト，1,024²バイト，1,024³バイト，1,024⁴バイトです。

謝　辞

COBOL言語仕様は，CODASYL（the Conference on Data Systems Languages：データシステムズ言語協議会）によって，開発された。OpenTP1のユーザアプリケーションプログラムのインタフェース仕様のうち，データ操作言語（DML　Data Manipulation Language）の仕様は，CODASYL　COBOL（1981）の通信節，RECEIVE文，SEND文，COMMIT文，及びROLLBACK文を参考にし，それに日立製作所独自の解釈と仕様を追加して開発した。原開発者に対し謝意を表すとともに，CODASYLの要求に従って以下の謝辞を掲げる。なお，この文章は，COBOLの原仕様書「CODASYL COBOL JOURNAL OF DEVELOPMENT 1984」の謝辞の一部を再掲するものである。

いかなる組織であっても，COBOLの原仕様書とその仕様の全体又は一部分を複製すること，マニュアルその他の資料のための土台として原仕様書のアイデアを利用することは自由である。ただし，その場合には，その刊行物のまえがきの一部として，次の謝辞を掲載しなければならない。書評などに短い文章を引用するときは，"COBOL"という名称を示せば謝辞全体を掲載する必要はない。

COBOLは産業界の言語であり，特定の団体や組織の所有物ではない。

CODASYL　COBOL委員会又は仕様変更の提案者は，このプログラミングシステムと言語の正確さや機能について，いかなる保証も与えない。さらに，それに関連する責任も負わない。

　次に示す著作権表示付資料の著作者及び著作権者

FLOW-MATIC（Sperry Rand Corporationの商標），

Programming for the Univac（R）I and II，Data Automation Systems，

Sperry Rand Corporation　著作権表示1958年，1959年；

IBM Commercial Translator Form No.F 28-8013，IBM著作権表示1959年；

FACT，DSI 27A5260-2760，Minneapolis-Honeywell，著作権表示1960年

は，これら全体又は一部分をCOBOLの原仕様書中に利用することを許可した。この許可は，COBOL原仕様書をプログラミングマニュアルや類似の刊行物に複製したり，利用したりする場合にまで拡張される。

1.　概要

TP1/NET/UDPは，OpenTP1システムを構成するプログラムの一つです。ホストコンピュータ，端末などをUDPプロトコルによって論理的に接続し，メッセージを送受信します。この章では，TP1/NET/UDPの概要について説明します。

＜この章の構成＞

1.1　AP間通信の概要

1.2　AP間通信の形態

1.3　ソフトウェアの構成

1.1　AP間通信の概要

AP間通信とは，異なるシステムにあるアプリケーションプログラム間でのメッセージ送受信のことです。

TP1/NET/UDPは，OSが提供するUDPのソケットを利用してAP間通信をするプログラムです。送受信できるメッセージの種類は，ブロードキャストメッセージ，ユニキャストメッセージ，およびマルチキャストメッセージの3種類です。

TP1/NET/UDPを使用したネットワーク構成の例を次の図に示します。

図1-1　TP1/NET/UDPを使用したネットワーク構成の例

1.2　AP間通信の形態

TP1/NET/UDPを使用したAP間通信の形態には，以下の七つがあります。

不特定の相手に対する同期送信
ブロードキャストメッセージを同期送信することで実現します。

特定の一つの相手に対する同期送信
ユニキャストメッセージを同期送信することで実現します。

特定の複数の相手に対する同期送信
マルチキャストメッセージを同期送信することで実現します。

不特定の相手に対する一方送信
ブロードキャストメッセージを一方送信することで実現します。

特定の一つの相手に対する一方送信
ユニキャストメッセージを一方送信することで実現します。

特定の複数の相手に対する一方送信
マルチキャストメッセージを一方送信することで実現します。

一方受信
ブロードキャストメッセージ，ユニキャストメッセージ，およびマルチキャストメッセージの受信が該当します。なお，TP1/NET/UDPのユーザに対し，受信したメッセージの種類は通知されません。

TP1/NET/UDPを使用したAP間通信の例を次の図に示します。

図1-2　TP1/NET/UDPを使用したAP間通信の例

注意

マルチキャスト通信をするためには，マルチキャストをサポートしたLANアダプタやルータなどのネットワーク機器が必要です。

1.3　ソフトウェアの構成

TP1/NET/UDPは，OpenTP1システムに組み込まれて動作するプログラムです。OpenTP1のメッセージ送受信機能(TP1/Message Control，TP1/NET/Library)と連携して，メッセージ制御機能（MCF）を実現します。

この節では，TP1/NET/UDPを使用したMCFを実現するための前提プログラムと，TP1/NET/UDPを組み込んだソフトウェア構成について説明します。

＜この節の構成＞

1.3.1　前提プログラム

1.3.2　ソフトウェア構成の例

1.3.1　前提プログラム

TP1/NET/UDPを使用したMCFを実現するための前提プログラムは次のとおりです。

適用OS：AIX

P-1M64-2131　uCosminexus TP1/Server Base　07-00以降

適用OS：Linux 4

P-9S64-2161　uCosminexus TP1/Server Base　07-00以降

P-9V64-2121　uCosminexus TP1/Server Base　07-00以降

適用OS：Linux 5.1

P-9S64-2171　uCosminexus TP1/Server Base　07-02以降

P-9V64-2131　uCosminexus TP1/Server Base　07-02以降

1.3.2　ソフトウェア構成の例

TP1/NET/UDPを組み込んだソフトウェア構成の例を次の図に示します。

また，TP1/NET/UDPがAP間通信で使用するプロトコル，および主な通信相手プログラムを表1-1に示します。

図1-3　TP1/NET/UDPを組み込んだソフトウェア構成

注※

TP1/NET/UDPで扱うUAPは，MHPおよびSPPです。UAPについては，マニュアル「OpenTP1 プログラム作成の手引」を参照してください。

表1-1　TP1/NET/UDPが適用するAP間通信のプロトコルUDP

プロトコル | 主な通信相手
UDPプロトコル | UDPプロトコルに対応するシステム（プログラム）

2.　機能

一般に，AP間通信をするときには，自システムと相手システムとの間であらかじめ通信上の規約（プロトコル）を決める必要があります。TP1/NET/UDPは，論理端末を通してメッセージを送受信します。

この章では，TP1/NET/UDPでの論理端末の運用，メッセージの種類と送受信の方法などについて説明します。

＜この章の構成＞

2.1　AP間通信の仕組み

2.2　AP間通信メッセージの送受信

2.1　AP間通信の仕組み

UDPプロトコルを使用した通信では，コネクションを確立することなく，メッセージの送受信ができます。そのため，TP1/NET/UDPを使用する場合も，コネクションを意識する必要がありません。TP1/NET/UDPでは，論理端末を通して自システムのUAPと相手システムの間でメッセージを送受信します。

この節では，TP1/NET/UDPを運用する上での論理端末の閉塞解除および閉塞の処理の流れと，論理端末とアプリケーションの型の関係について説明します。さらに，通信相手のアドレスの指定方法とAP間通信の注意事項について説明します。

＜この節の構成＞

2.1.1　論理端末の閉塞解除と閉塞

2.1.2　論理端末とアプリケーションの型の関係

2.1.3　通信相手のアドレスの指定

2.1.4　AP間通信の注意事項

2.1.1　論理端末の閉塞解除と閉塞

論理端末の閉塞解除と閉塞の処理の流れについて説明します。

＜この項の構成＞

(1)　論理端末の閉塞解除

(2)　論理端末の閉塞

(3)　複数のMCF通信プロセスによる同一ポート番号の共用

(1)　論理端末の閉塞解除

TP1/NET/UDPでAP間通信をするためには，論理端末の閉塞を解除する必要があります。論理端末の閉塞を解除すると，自システムのUDPプロトコルに自ポート番号が登録されて，TP1/NET/UDPでAP間通信ができる状態になります。

論理端末の閉塞を解除するには，次の2とおりの方法があります。

OpenTP1の開始時および再開始時に論理端末の閉塞を解除する方法

運用コマンド（mcftactle）の入力によって論理端末の閉塞を解除する方法

(a)　OpenTP1の開始時および再開始時の閉塞解除

OpenTP1の開始時および再開始時に論理端末を自動的に閉塞解除できます。

論理端末を自動的に閉塞解除するには，MCF通信構成定義でmcftalcleコマンドの-iオプションにautoを指定します。このオプションにmanualを指定すると，TP1/NET/UDPの起動後に運用コマンド（mcftactle）を入力して論理端末の閉塞を解除する必要があります。デフォルトはmanualです。

(b)　運用コマンドの入力による閉塞解除

運用コマンド（mcftactle）の入力によって論理端末の閉塞を解除する処理の流れを次の図に示します。

図2-1　運用コマンド（mcftactle）の入力による論理端末の閉塞解除

論理端末の閉塞解除が完了すると，論理端末の閉塞解除を通知するメッセージ（KFCA18900-I）が出力されます。さらに，UAPに対して状態通知イベント（COPNEVT）が通知されます。したがって，COPNEVTの通知を契機に業務を開始するようにUAPを設計してください。

論理端末の閉塞解除の処理中に障害が発生した場合は，論理端末の閉塞解除の失敗を通知するメッセージ（KFCA18903-E）が出力され，UAPに対して障害通知イベント（CERREVT）が通知されます。

注意

TP1/Message ControlおよびTP1/NET/Libraryから，コネクションに関連するメッセージが出力される場合があります。これらのメッセージでコネクション名として出力される情報には，論理端末名称が出力されます。

(2)　論理端末の閉塞

TP1NET/UDPは，次に示す場合に論理端末を閉塞します。

オンラインが終了した場合

運用コマンド（mcftdctle）が入力された場合

論理端末に障害が発生した場合

論理端末を閉塞すると，自システムのUDPプロトコルから自ポート番号が削除されて，TP1/NET/UDPでAP間通信ができない状態になります。

運用コマンド（mcftdctle）の入力によって論理端末を閉塞する処理の流れを次の図に示します。

図2-2　運用コマンド（mcftdctle）の入力による論理端末の閉塞

論理端末の閉塞が完了すると，論理端末の閉塞を通知するメッセージ（KFCA18901-I）が出力されます。さらに，UAPに対して次に示すイベントが通知されます。

運用コマンド（mcftdctle）の入力によって論理端末を閉塞した場合は，状態通知イベント（CCLSEVT）が通知されます。

障害発生によって論理端末を閉塞した場合は，障害通知イベント（CERREVT）が通知されます。

オンライン終了の場合は，イベントは通知されません。

(3)　複数のMCF通信プロセスによる同一ポート番号の共用

TP1/NET/UDPでは，同一マシン上の複数のMCF通信プロセス間で，同一の自ポート番号を共用できます。共用しているポート番号あてのブロードキャストメッセージおよびマルチキャストメッセージは，複数のMCF通信プロセスで受信できます。

同一の自ポート番号を複数のMCF通信プロセスで共用した構成で，論理端末の閉塞を解除するには，ポート番号を共用するすべてのMCF通信プロセスのMCF通信構成定義で，mcftalcleコマンドの-rオプションのreuseオペランドにyesを指定してください。

これによって，次の図に示すような相互ホットスタンバイ構成での運用ができます。

図2-3　相互ホットスタンバイ構成での運用例

注意

一つのMCF通信プロセスの複数の論理端末で，同一の自ポート番号は共用できません。MCF通信構成定義の定義オブジェクト生成時にエラーとなります。複数の論理端末で同一のポートを共用する場合は，MCF通信プロセスを分割してください。

複数のMCF通信プロセスで同一のポート番号を共用する場合，MCF通信構成定義の指定値は統一してください。指定値が混在する場合，二つ目以降の論理端末の閉塞解除に失敗します。

2.1.2　論理端末とアプリケーションの型の関係

TP1/NET/UDPで扱う論理端末の端末タイプはany（任意型）です。この端末タイプを指定することで，TP1/NET/UDPで使用するすべての通信形態に対応できます。

アプリケーションは，ユーザが送受信データの中に指定したアプリケーション名をキーとして，一つのUAP（MHP）プロセスで実行されます。アプリケーションはサービスの方式によって型が異なります。この型をTP1/Message Controlのアプリケーション属性の一つとして，システム定義時に指定します。TP1/NET/UDPのアプリケーションの型は非応答型（noans）です。

論理端末の端末タイプ，メッセージ，アプリケーションの型，UAPインタフェース，および通信形態の関係を次の表に示します。

表2-1　論理端末の端末タイプ，メッセージ，アプリケーションの型，UAPインタフェース，および通信形態の関係

論理端末の端末タイプ | メッセージ | アプリケーションの型 | UAPインタフェース | 通信形態
any（任意型論理端末） | 一方送信メッセージ | 非応答型（noans） | send | 一方送信
receive | 一方受信
sendsync | 同期送信

2.1.3　通信相手のアドレスの指定

任意の通信相手とメッセージを送受信するために，TP1/NET/UDPでは相手アドレス指定用の制御ヘッダをメッセージに付加して使用します。

メッセージの送信時には，制御ヘッダに指定する相手のアドレスを変更することで，送信のたびに相手を変更できます。メッセージの受信時には，TP1/NET/UDPがメッセージの先頭に制御ヘッダを付加します。

通信相手のアドレスを指定するための制御ヘッダの形式を次の図に示します。

図2-4　制御ヘッダの形式

メッセージの送信時には，制御ヘッダの所定の領域に通信相手のIPアドレスとポート番号を設定する必要があります。

IPアドレスは16進数形式で設定します。dotted-decimal形式では指定できません。ポート番号は10進数を16進数形式に変換したあと，2バイト表記で設定します。予備領域はすべてゼロクリアしてください。

制御ヘッダに設定するIPアドレスとポート番号の例を次の図に示します。

図2-5　通信相手のIPアドレスとポート番号の設定例

メッセージの受信時には，TP1/NET/UDPが通信相手のIPアドレスとポート番号を制御ヘッダの所定の領域に設定します。この内容を利用して，送信元のアドレスを識別できます。ホスト名が必要な場合は，設定されたIPアドレスを基にgethostbyaddr()関数などを使用して，UAPまたはUOCで取得してください。

なお，通信相手のIPアドレスとIPポート番号のバイト順序は，ビッグエンディアンでなければなりません。ビッグエンディアンとは，バイトを低い方から順番に並べて，最下位のビットを最上位のバイトに置く方式のことです。ビッグエンディアンでのバイト順序を次の図に示します。

図2-6　ビッグエンディアンでのバイト順序

2.1.4　AP間通信の注意事項

AP間通信を行う上での注意事項を示します。

＜この項の構成＞

(1)　メッセージの保証

(2)　送受信時のメッセージ長

(3)　ブロードキャストメッセージ送信時の最大メッセージ長

(4)　メッセージの種類の判別

(5)　メッセージ送受信時の相手アドレスのチェック

(1)　メッセージの保証

TP1/NET/UDPでは，メッセージの欠落，重複，および到着順序のチェックやフロー制御は実施しません。また，下位プロトコルにUDPプロトコルを使用するため，メッセージは保証されません。したがって，UAP間でメッセージをやり取りする上で，次に示す項目を事前に取り決めておく必要があります。

メッセージの送達確認方法

メッセージの重複および欠落のチェック方法と対処方法

メッセージのフロー制御方法

(2)　送受信時のメッセージ長

UDPプロトコルを使用する通信では，送受信するメッセージ長とシステムバッファ長の整合性に注意する必要があります。システムバッファとは，UDPプロトコルが持つ内部バッファのことです。システムバッファ長は，MCF通信構成定義（mcftalcle -s）で指定します。指定方法については，5章の「mcftalcle（論理端末定義の開始）」を参照してください。

システムバッファ長の最大値および実際に確保されるシステムバッファ長はご使用のOSの実装に依存します。

TP1/NET/UDPで送信するメッセージ長が，システムの送信バッファ長よりも大きい場合，メッセージの送信は失敗し，論理端末が閉塞します。

TP1/NET/UDPの受信バッファ長が，相手システムから受信したメッセージ長より小さい場合，かつ，相手システムから受信したメッセージ長がシステムの受信バッファ長より小さい場合，受信は正常に完了します。ただし，受信できるメッセージのサイズはTP1/NET/UDPのバッファ長までとなります。残りはUDPプロトコルによって破棄されます。

TP1/NET/UDPがメッセージを受信する前に，システムの受信バッファが満杯になった場合，そのあとに受信したメッセージはOSが破棄します。システムの受信バッファには，運用形態に合わせて余裕を持った値を指定してください。

(3)　ブロードキャストメッセージ送信時の最大メッセージ長

ブロードキャストメッセージを送信する場合の最大メッセージ長は，ご使用のOSによって異なります。詳しくは，OSのマニュアル，技術資料または実装を確認してください。

(4)　メッセージの種類の判別

TP1/NET/UDPで送受信できるメッセージの種類には，ブロードキャストメッセージ，ユニキャストメッセージ，およびマルチキャストメッセージの3種類がありますが，メッセージ送受信時にメッセージの種類の判定はされません。

メッセージの送信時は，指定する相手アドレスの種別によって，次の表のように区別してください。

表2-2　相手アドレスとメッセージの種類の対応

相手アドレス | メッセージの種類
ブロードキャストアドレス | ブロードキャストメッセージ
特定の相手ノードアドレス | ユニキャストメッセージ
マルチキャストアドレス | マルチキャストメッセージ

メッセージの受信時は，受信したメッセージの内容または送信元の相手アドレスから，必要に応じてメッセージの種類を判定してください。

(5)　メッセージ送受信時の相手アドレスのチェック

TP1/NET/UDPは任意の相手と通信するため，メッセージ送受信時に相手アドレスのチェックを実施しません。

メッセージの送信時には，TP1/NET/UDPはユーザが設定した相手アドレスをそのままUDPプロトコルに渡します。ユーザが不正な相手アドレスを設定した場合は，UDPプロトコルの相手アドレスのチェックによって送信に失敗する場合があります。

メッセージの受信時には，TP1/NET/UDPはメッセージに付加した制御ヘッダの所定の領域に相手アドレスを設定します。この相手アドレスから，送信元を識別してください。

2.2　AP間通信メッセージの送受信

TP1/NET/UDPでは，一方送信メッセージ，一方受信メッセージ，および同期型の送信メッセージを使用して，メッセージを送受信します。

この節では，メッセージの送受信の処理について説明します。さらに，TP1/NET/UDPがアプリケーション名を決定する処理手順について説明します。

＜この節の構成＞

2.2.1　一方送信メッセージの送信

2.2.2　一方送信メッセージの受信

2.2.3　同期型メッセージの送信

2.2.4　送受信するメッセージのデータ形式

2.2.5　アプリケーション名の決定

2.2.1　一方送信メッセージの送信

一方送信メッセージの送信は，自システムのUAPから出力キューを介して相手システムへメッセージを送信する形態です。

UAPが一方送信メッセージの送信要求（send）を行うと，メッセージが出力キューに登録されます。TP1/NET/UDPは，出力キューからメッセージを取り出し，相手システムに送信します。送信処理が完了すると，出力キューがメモリキューの場合，TP1/NET/UDPは出力キューにある送信済みメッセージのデータを消去します。出力キューがディスクキューの場合，出力キューに送信済みメッセージのデータを保持します。保持した送信済みのメッセージは，メッセージの再送に使用できます。メッセージの再送については，マニュアル「OpenTP1 プログラム作成の手引」を参照してください。

なお，一方送信メッセージの送信（send）が正常リターンしたことは，メッセージを出力キューに登録できたことを意味します。同期型メッセージの送信（sendsync）の場合と異なり，相手システムへの一方送信メッセージの送信要求が完了したというわけではありません。

一方送信メッセージの送信処理の流れを次の図に示します。

図2-7　一方送信メッセージの送信処理の流れ

2.2.2　一方送信メッセージの受信

一方送信メッセージの受信は，入力キューを介して相手システムからのメッセージを受信する形態です。

TP1/NET/UDPは，メッセージの受信を通知されると，UDPプロトコルからメッセージを取り出して受信用バッファに格納します。その際，受信したメッセージ内に，UDPプロトコルから通知された相手アドレスを制御ヘッダとして設定した上で，入力キューにメッセージを書き込みます。入力キューを監視しているMCFは，入力キューへのメッセージ書き込みを契機に，アプリケーション名に対応するUAPに受信メッセージを通知（receive）します。

なお，入力キューの容量は，システムのトラフィック量に応じて，オーバフローが発生しないように見積もってください。

一方送信メッセージの受信処理の流れを次の図に示します。

図2-8　一方送信メッセージの受信処理の流れ

2.2.3　同期型メッセージの送信

同期型メッセージの送信は，出力キューを介さないで相手システムにメッセージを送信する形態です。

同期型メッセージの送信要求（sendsync）はUDPプロトコルに対する送信処理の完了を契機にリターンします。TP1/NET/UDPでは，UDPプロトコルに対する送信要求が即時にリターンするため，同期型メッセージの送信要求を受け付けてからリターンするまでの時間監視は実施しません。

同期型メッセージの送信処理の流れを次の図に示します。

図2-9　同期型メッセージの送信処理の流れ

2.2.4　送受信するメッセージのデータ形式

TP1/NET/UDPを使用したAP間通信で送受信するメッセージは，自システムのUAPと相手システムの間の受け渡しの過程でデータ形式が変化します。

送受信するメッセージのデータ形式の変化を次の図に示します。

図2-10　メッセージのデータ形式

注※

アプリケーション名は，必要な場合だけ設定します。

2.2.5　アプリケーション名の決定

TP1/NET/UDPは，メッセージを受信するときに，アプリケーション名を決定します。アプリケーション名を決定する方法を，優先順位の高い順に次に示します。

入力メッセージ編集UOCでの決定

MCF通信構成定義（mcftalcle -v）での決定

入力メッセージの先頭から空白の手前までの8バイト以内をアプリケーション名として決定

アプリケーション名を決定できなかった場合，エラーイベント（ERREVT1）を起動します。アプリケーション名の決定の処理手順を次の図に示します。

図2-11　アプリケーション名の決定の処理手順

3.　メッセージ送受信インタフェース

TP1/NET/UDPを使用してメッセージを送受信する場合，ユーザは個別の業務に対応させるため，UAPを作成します。この章では，UAPの作成方法，および作成例について説明します。

＜この章の構成＞

メッセージ送受信インタフェースの一覧

dc_mcf_receive － 一方送信メッセージの受信（C言語）

dc_mcf_resend － メッセージの再送（C言語）

dc_mcf_send － 一方送信メッセージの送信（C言語）

dc_mcf_sendsync － 同期型メッセージの送信（C言語）

CBLDCMCF('RECEIVE ') － 一方送信メッセージの受信（COBOL言語）

CBLDCMCF('RESEND ') － メッセージの再送（COBOL言語）

CBLDCMCF('SEND ') － 一方送信メッセージの送信（COBOL言語）

CBLDCMCF('SENDSYNC') － 同期型メッセージの送信（COBOL言語）

RECEIVE － メッセージの受信（データ操作言語）

SEND － メッセージの送信（データ操作言語）

ユーザアプリケーションプログラム作成例

メッセージ送受信インタフェースの一覧

TP1/NET/UDPで使用するメッセージ送受信インタフェースについて，C言語，COBOL言語，およびデータ操作言語に分けて説明します。

UAP作成の詳細については，マニュアル「OpenTP1 プログラム作成の手引」を参照してください。

C言語のメッセージ送受信

C言語でメッセージ送受信をする場合は，OpenTP1で提供する関数を使用してUAPを作成します。

メッセージ送受信の関数を次の表に示します。

表3-1　メッセージ送受信の関数（C言語）

関数名 | 機能
dc_mcf_receive | 一方送信メッセージの受信
dc_mcf_resend | メッセージの再送
dc_mcf_send | 一方送信メッセージの送信
dc_mcf_sendsync | 同期型メッセージの送信

その他の関数については，マニュアル「OpenTP1 プログラム作成リファレンス C言語編」を参照してください。

COBOL言語のメッセージ送受信

COBOL言語でメッセージを送受信する場合は，OpenTP1システムの関数に対応しているプログラムを，CALL文で呼び出してUAPを作成します。

メッセージ送受信の関数に対応するプログラムを次の表に示します。

表3-2　メッセージ送受信の関数に対応するプログラム（COBOL言語）

プログラム名 | データ名Aに設定する要求コード | 機能
CBLDCMCF | 'RECEIVE△' | 一方送信メッセージの受信
'RESEND△△' | メッセージの再送
'SEND△△△△' | 一方送信メッセージの送信
'SENDSYNC' | 同期型メッセージの送信

その他のプログラムについては，マニュアル「OpenTP1 プログラム作成リファレンス COBOL言語編」を参照してください。

データ操作言語（COBOL言語）のメッセージ送受信

データ操作言語（COBOL言語）を使用した，メッセージ送受信の通信文について説明します。データ操作言語の形式の詳細については，マニュアル「OpenTP1 プログラム作成リファレンス COBOL言語編」を参照してください。

TP1/NET/UDPで固有の通信文について，次の表に示します。

表3-3　メッセージ送受信の通信文（データ操作言語）

通信文 | 機能 | 対応するCALLインタフェース
データコミュニケーション機能 | RECEIVE | メッセージの受信 | 一方送信メッセージの受信 | CBLDCMCF('RECEIVE△')
SEND | メッセージの送信 | 一方送信メッセージの送信 | CBLDCMCF('SEND△△△△')
同期型メッセージの送信 | CBLDCMCF('SENDSYNC')

dc_mcf_receive － 一方送信メッセージの受信（C言語）

形式

ANSI C，C++の形式

#include <dcmcf.h>
int  dc_mcf_receive (DCLONG  action, DCLONG  commform,
                    char  *termnam, char  *resv01,
                    char  *recvdata, DCLONG  *rdataleng,
                    DCLONG  inbufleng, DCLONG  *time)

K&R版 Cの形式

#include <dcmcf.h>
int dc_mcf_receive (action, commform, termnam, resv01, recvdata,
                   rdataleng, inbufleng, time)
DCLONG           action;
DCLONG           commform;
char             *termnam;
char             *resv01;
char             *recvdata;
DCLONG           *rdataleng;
DCLONG           inbufleng;
DCLONG           *time;

機能

論理端末に届いたメッセージのうち，一つのセグメントを受信します。セグメントの数だけdc_mcf_receive関数を呼び出すと，一つの論理メッセージを受信できます。

dc_mcf_receive関数で受信できるメッセージの種類を次に示します。

相手システムから送信されたメッセージ

MCFイベント

アプリケーション起動で渡されたメッセージ

セグメントを受信する領域の形式を次に示します。Lはバッファ形式1の場合8バイト，バッファ形式2の場合4バイトです。

制御ヘッダ（dcmudp_dc_header）は<dcmudpu.h>に，次のように定義されています。

typedef struct {
   unsigned  char   r_exipaddr[12];       …予備
   DCULONG          r_ipaddr;             …相手IPアドレス
   unsigned  char   rsv1[2];              …予備
   unsigned  short  r_portno;             …相手ポート番号
   unsigned  char   rsv2[4];              …予備
} dcmudp_dc_header;

相手IPアドレスと相手ポート番号の設定方法については，「2.1.3　通信相手のアドレスの指定」を参照してください。

UAPで値を設定する引数

●action

メッセージの先頭セグメントを受信するかどうか，および使用するバッファ形式を次の形式で指定します。

｛DCMCFFRST|DCMCFSEG｝〔|｛DCMCFBUF1|DCMCFBUF2｝〕

DCMCFFRST

先頭セグメントを受信する場合，およびメッセージが単一セグメントの場合に設定します。

DCMCFSEG

中間セグメントまたは最終セグメントを受信する場合に設定します。

DCMCFBUF1

バッファ形式1を使用する場合に設定します。

DCMCFBUF2

バッファ形式2を使用する場合に設定します。

●commform

DCNOFLAGSを設定します。

●termnam

中間セグメントまたは最終セグメントを受信する場合は，入力元の論理端末名称を設定します。論理端末名称には，先頭セグメントを受信したときに返された論理端末名称を設定します。

先頭セグメントの処理終了後，termnamにはOpenTP1から値が返ります。

●resv01

ヌル文字を設定します。

●recvdata

セグメントを受信する領域を設定します。

dc_mcf_receive関数が終了すると，メッセージのセグメントの一つが返されます。

処理終了後，recvdataにはOpenTP1から値が返ります。

●inbufleng

セグメントを受信する領域の長さを設定します。

OpenTP1から値が返される引数

●termnam

先頭セグメントを受信する場合だけ，入力元の論理端末名称が返されます。中間セグメントまたは最終セグメントを受信する場合は，ここで返された論理端末名称をtermnamに設定してください。

●recvdata

受信したセグメントの内容が返されます。

●rdataleng

受信したセグメントの長さが返されます。

●time

メッセージを受信した時刻が，1970年1月1日0時0分0秒からの通算の秒数で返されます。

リターン値

リターン値
リターン値
（数値）
意味

DCMCFRTN_00000
0
正常に終了しました。

DCMCFRTN_71000
-12000
先頭セグメントを受信するdc_mcf_receive関数を2回以上呼び出しています。中間セグメントまたは最終セグメントを受信する場合はactionにDCMCFSEGを設定してdc_mcf_receive関数を呼び出してください。

DCMCFRTN_71001
-12001
メッセージの最終セグメントを受信したあとで，次のセグメントを受信するdc_mcf_receive関数を呼び出しています。直前に呼び出したdc_mcf_receive関数でメッセージはすべて受信しました。
このリターン値が返されたあとに，dc_mcf_receive関数を呼び出した場合は，リターン値DCMCFRTN_72000が返されます。

DCMCFRTN_71002
-12002
メッセージキューからの入力処理中に障害が発生しました。

メッセージキューが閉塞されています。

DCMCFRTN_72000
-13000
＜MHPの実行でリターンした場合＞

先頭セグメントを受信するdc_mcf_receive関数を呼び出す前に，中間セグメントまたは最終セグメントを受信するdc_mcf_receive関数を呼び出しています。先頭セグメントを受信する場合は，actionにDCMCFFRSTを設定してdc_mcf_receive関数を呼び出してください。

リターン値DCMCFRTN_71001が返されたあとに，再びdc_mcf_receive関数を呼び出しています。

＜SPPの実行でリターンした場合＞
SPPではdc_mcf_receive関数を呼び出せません。

DCMCFRTN_72001
-13001
termnamに設定した論理端末名称が間違っています。

DCMCFRTN_72013
-13013
inbuflengの指定値を超えるメッセージ（セグメント）を受信しました。inbuflengの指定値を超えた部分は切り捨てられました。

DCMCFRTN_72016
-13016
actionに設定した値が間違っています。

resv01に設定した値が間違っています。

引数に設定した値に間違いがあります。

DCMCFRTN_72024
-13024
commformに設定した値が間違っています。

DCMCFRTN_72025
-13025
actionに設定したセグメント種別（DCMCFFRSTまたはDCMCFSEG)の値が間違っています。

DCMCFRTN_72036
-13036
inbuflengの指定値が不足しています。バッファ形式1の場合は9バイト以上，バッファ形式2の場合は5バイト以上の領域を確保してください。

上記以外
－
プログラムの破壊などによる，予期しないエラーが発生しました。

（凡例）

－：該当しません。

dc_mcf_resend － メッセージの再送（C言語）

形式

ANSI C，C++の形式

#include <dcmcf.h>
int  dc_mcf_resend(DCLONG action, DCLONG commform, char *rtermnam,
                  char *resv01, DCLONG oseqid, DCLONG orgseq,
                  char *otermnam, char *resv02, char *resv03,
                  char *resv04, DCLONG opcd)

K&R版 Cの形式

#include <dcmcf.h>
int  dc_mcf_resend(action, commform, rtermnam, resv01, oseqid,
                  orgseq, otermnam, resv02, resv03, resv04, opcd)
DCLONG          action;
DCLONG          commform;
char            *rtermnam;
char            *resv01;
DCLONG          oseqid;
DCLONG          orgseq;
char            *otermnam;
char            *resv02;
char            *resv03;
char            *resv04;
DCLONG          opcd;

機能

以前に送信したメッセージを，再び送信します。再送するメッセージは，以前に送信したメッセージとは別の，新しいメッセージとして扱います。どのメッセージを再送するかは，次に示す送信済みメッセージの情報で選択できます。

出力先の論理端末名称

メッセージ通番

メッセージ種別（一般の一方送信，優先の一方送信）

対象としたメッセージが以前に送信されていない場合は，dc_mcf_resend関数はリターン値DCMCFRTN_NOMSGを返します。また，メッセージキュー（ディスクキュー）内に対象のメッセージがない場合も，リターン値DCMCFRTN_NOMSGを返します。このため，使用するメッセージキューの種別ではディスクキューを指定するとともに，メッセージキューファイルの容量および保持メッセージ数（メッセージキューサービス定義のquegrpコマンドの-mオプションで指定）に余裕を持った値を指定してください。

UAPで値を設定する引数

●action

再送するメッセージに出力通番を付け直すかどうか，一般か優先かどうか，および最終出力通番のメッセージを再送するかどうかを，次の形式で設定します。

｛DCMCFSEQ|DCMCFNSEQ｝〔｜｛DCMCFNORM|DCMCFPRIO｝〕〔｜DCMCFLAST〕

DCMCFSEQ

再送するメッセージに出力通番を付け直す場合に設定します。

DCMCFNSEQ

再送するメッセージに出力通番を付け直さない場合に設定します。

DCMCFNORM

一般の一方送信メッセージとして再送する場合に設定します。

DCMCFPRIO

優先の一方送信メッセージとして再送する場合に設定します。

DCMCFLAST

最終出力通番を持つメッセージを再送する場合に設定します。この値を設定した場合は，orgseqに設定した値は無効になります。

●commform

一方送信を示す，DCMCFOUTを設定します。

●rtermnam

出力先の論理端末名称を設定します。論理端末名称の長さは最大8バイトです。論理端末名称の最後にはヌル文字を付けてください。

●resv01

ヌル文字を設定します。

●oseqid

再送するメッセージを検索するキーとして，以前に送信したメッセージの送信種別を設定します。

DCMCFRID_NORM

一般の一方送信メッセージを対象とする場合に設定します。

DCMCFRID_PRIO

優先の一方送信メッセージを対象とする場合に設定します。

省略した場合は，DCMCFRID_NORM（一般の一方送信メッセージを対象）が設定されます。DCMCFRID_PRIOを設定した場合は，otermnamに出力先の論理端末名称を設定できません。

●orgseq

再送するメッセージを検索するキーとして，以前に送信したメッセージの出力通番を設定します。actionでDCMCFLASTを設定した場合は，ここに設定した値は無効になります。

●otermnam

再送するメッセージを検索するキーとして，以前に送信したメッセージの出力先の論理端末名称を設定します。論理端末名称の長さは最大8バイトです。論理端末名称の後ろにはヌル文字を付けてください。

●resv02，resv03，resv04

ヌル文字を設定します。

●opcd

DCNOFLAGSを設定します。

リターン値

リターン値
リターン値
（数値）
意味

DCMCFRTN_00000
0
正常に終了しました。

DCMCFRTN_NOMSG
-11904
該当するメッセージがありません。

DCMCFRTN_BUF_SHORT
-11905
再送するメッセージのセグメントの長さが，UAP共通定義（mcfmuap -e）で指定した値を超えています。

DCMCFRTN_71002
-12002
メッセージキューへの出力処理中に障害が発生しました。

メッセージキューが閉塞されています。

メッセージキューが割り当てられていません。

MCFが終了処理中のため，メッセージの再送を受け付けられません。

DCMCFRTN_71003
-12003
メッセージキューが満杯です。

DCMCFRTN_71004
-12004
メッセージキューから取り出したメッセージを格納するバッファ（作業領域）を，メモリ上に確保できませんでした。

DCMCFRTN_71108
-12108
メッセージを再送しようとしましたが，再送先の管理テーブルが確保できませんでした。

プロセスのローカルメモリが不足しています。

DCMCFRTN_72000
-13000
＜MHPの実行でリターンした場合＞
先頭セグメントを受信するdc_mcf_receive関数を呼び出す前に，dc_mcf_resend関数を呼び出しています。
非トランザクション属性のMHPから，dc_mcf_resend関数を呼び出しています。

＜SPPの実行でリターンした場合＞
トランザクションでないSPPの処理から，dc_mcf_resend関数を呼び出しています。

DCMCFRTN_72001
-13001
rtermnamまたはotermnamに設定した論理端末名称が間違っています。

dc_mcf_resend関数を呼び出せない論理端末を設定しています。

DCMCFRTN_72016
-13016
actionに設定したメッセージ種別（DCMCFNORMまたはDCMCFPRIO）の値が間違っています。

opcdに設定した値が間違っています。

oseqidに設定した値が間違っています。

resv01，resv02，resv03，またはresv04に設定した値が間違っています。

引数に設定した値に間違いがあります。

DCMCFRTN_72017
-13017
actionに設定した出力通番の要否（DCMCFSEQまたはDCMCFNSEQ）の値が間違っています。

DCMCFRTN_72024
-13024
commformに設定した値が間違っています。

上記以外
－
プログラムの破壊などによる，予期しないエラーが発生しました。

（凡例）

－：該当しません。

注意事項

メッセージの再送時には，MCFマネジャ定義のUAP共通定義（mcfmuap）の-eオプションおよび-lオプションの指定値に注意してください。

-eオプション

-eオプションでは，dc_mcf_resend関数で使用する作業領域の大きさを指定します。再送するメッセージのセグメントがこの作業領域より大きい場合，dc_mcf_resend関数はメッセージを再送しないで，リターン値DCMCFRTN_BUF_SHORTを返します。このため，-eオプションでは，セグメントの最大長よりも大きな値を設定しておいてください。

-lオプション

-lオプションでは，通番に関して指定します。指定内容によっては，メッセージキューファイル内に同じ通番を持つメッセージが同時に存在する場合があります。同じ通番を持つメッセージが存在する場合，どのメッセージを再送するかは保証できません。

dc_mcf_send － 一方送信メッセージの送信（C言語）

形式

ANSI C，C++の形式

#include <dcmcf.h>
int  dc_mcf_send(DCLONG action, DCLONG commform, char *termnam,
                char *resv01, char *senddata, DCLONG sdataleng,
                char *resv02, DCLONG opcd)

K&R版 Cの形式

#include <dcmcf.h>
int  dc_mcf_send(action, commform, termnam, resv01, senddata,
                sdataleng, resv02, opcd)
DCLONG          action;
DCLONG          commform;
char            *termnam;
char            *resv01;
char            *senddata;
DCLONG          sdataleng;
char            *resv02;
DCLONG          opcd;

機能

相手システムへ一方送信メッセージを送信します。一方送信メッセージは，一つのセグメントで構成されます。

セグメントを送信する領域の形式を次に示します。Lはバッファ形式1の場合は8バイト，バッファ形式2の場合は4バイトです。

制御ヘッダ（dcmudp_dc_header）は<dcmudpu.h>に，次のように定義されています。

typedef struct {
   unsigned  char   r_exipaddr[12];       …予備
   DCULONG          r_ipaddr;             …相手IPアドレス
   unsigned  char   rsv1[2];              …予備
   unsigned  short  r_portno;             …相手ポート番号
   unsigned  char   rsv2[4];              …予備
} dcmudp_dc_header;

相手IPアドレスと相手ポート番号の設定方法については，「2.1.3　通信相手のアドレスの指定」を参照してください。

UAPで値を設定する引数

●action

単一セグメントを送信すること，一般か優先かどうか，出力通番を付けるかどうか，および使用するバッファ形式を，次の形式で設定します。

DCMCFEMI〔|｛DCMCFNORM|DCMCFPRIO｝〕〔|｛DCMCFSEQ|DCMCFNSEQ｝〕〔|｛DCMCFBUF1|DCMCFBUF2｝〕

DCMCFEMI

単一セグメントを示すDCMCFEMIを設定します。

DCMCFNORM

一般の一方送信メッセージとして送信する場合に設定します。

DCMCFPRIO

優先の一方送信メッセージとして送信する場合に設定します。

DCMCFSEQ

出力通番が必要な場合に設定します。

DCMCFNSEQ

出力通番が必要ない場合に設定します。

DCMCFBUF1

バッファ形式1を使用する場合に設定します。

DCMCFBUF2

バッファ形式2を使用する場合に設定します。

●commform

一方送信を示す，DCMCFOUTを設定します。

●termnam

出力先の論理端末名称を設定します。論理端末名称の長さは最大8バイトです。論理端末名称の後ろにはヌル文字を付けてください。

●resv01

ヌル文字を設定します。

●senddata

送信するセグメントの内容を設定した送信領域を設定します。制御ヘッダの24バイトを含めて32000バイトまで送信できます。

送信領域の制御ヘッダ内の予備領域は，必ずすべて0に設定してください。

●sdataleng

送信するセグメントの長さを設定します。

●resv02

ヌル文字を設定します。

●opcd

DCNOFLAGSを設定します。

リターン値

リターン値
リターン値
（数値）
意味

DCMCFRTN_00000
0
正常に終了しました。

DCMCFRTN_71002
-12002
メッセージキューへの出力処理中に障害が発生しました。

メッセージキューが閉塞されています。

メッセージキューが割り当てられていません。

sdatalengに32000バイトを超える値を設定しています。

MCFが終了処理中のため，メッセージの送信を受け付けられません。

DCMCFRTN_71003
-12003
メッセージキューが満杯です。

DCMCFRTN_71004
-12004
メッセージを格納するバッファをメモリ上に確保できませんでした。

DCMCFRTN_71108
-12108
メッセージを送信しようとしましたが，送信先の管理テーブルが確保できませんでした。

プロセスのローカルメモリが不足しています。

DCMCFRTN_72000
-13000
＜MHPの実行でリターンした場合＞
先頭セグメントを受信するdc_mcf_receive関数を呼び出す前に，dc_mcf_send関数を呼び出しています。

＜SPPの実行でリターンした場合＞
トランザクションでないSPPの処理から，dc_mcf_send関数を呼び出しています。

DCMCFRTN_72001
-13001
termnamに設定した論理端末名称が間違っています。

termnamに設定した出力先の論理端末名称は，MCFで定義していません。

dc_mcf_send関数を呼び出せない論理端末を設定しています。

DCMCFRTN_72016
-13016
actionに設定したメッセージ種別（DCMCFNORMまたはDCMCFPRIO）の値が間違っています。

actionに設定した値が間違っています。

opcdに設定した値が間違っています。

resv01またはresv02に設定した値が間違っています。

引数に設定した値に間違いがあります。

DCMCFRTN_72017
-13017
actionに設定した出力通番の要否（DCMCFSEQまたはDCMCFNSEQ）の値が間違っています。

DCMCFRTN_72024
-13024
commformに設定した値が間違っています。

DCMCFRTN_72026
-13026
actionに設定したセグメント種別（DCMCFEMI）の値が間違っています。

DCMCFRTN_72041
-13041
sdatalengに0，またはマイナス値を設定しています。

上記以外
－
プログラムの破壊などによる，予期しないエラーが発生しました。

（凡例）

－：該当しません。

注意事項

MCFがUAPの送信要求をTP1/NET/UDPにスケジュールする優先順位は，高い方から同期型メッセージの送信，一方送信メッセージの送信（優先），一方送信メッセージの送信（一般）です。同一論理端末上で同期型メッセージの送信と一方送信メッセージの送信を併用する場合，送信メッセージの追い越しが発生する場合があります。

このため，同一論理端末上での，dc_mcf_send関数とdc_mcf_sendsync関数の併用は避けてください。同様に，COBOL言語およびデータ操作言語での，同期型メッセージの送信と一方送信メッセージの送信の併用は避けてください。

併用する場合は，dc_mcf_sendsync関数の送信メッセージがdc_mcf_send関数の送信メッセージを追い越した場合でも，問題が生じないように運用してください。

dc_mcf_sendsync － 同期型メッセージの送信（C言語）

形式

ANSI C，C++の形式

#include <dcmcf.h>
int  dc_mcf_sendsync (DCLONG  action, DCLONG  commform,
                     char  *termnam, char  *resv01,
                     char  *senddata, DCLONG  sdataleng,
                     char  *resv02, DCLONG  opcd，
                     DCLONG  watchtime)

K&R版 Cの形式

#include <dcmcf.h>
int dc_mcf_sendsync (action, commform, termnam, resv01,
                    senddata, sdataleng, resv02, opcd,
                    watchtime)
DCLONG          action;
DCLONG          commform;
char            *termnam;
char            *resv01;
char            *senddata;
DCLONG          sdataleng;
char            *resv02;
DCLONG          opcd;
DCLONG          watchtime;

機能

相手システムへ同期型でメッセージを送信します。メッセージは，一つのセグメントで構成されます。

セグメントを送信する領域の形式を次に示します。Lは，バッファ形式1の場合は8バイト，バッファ形式2の場合は4バイトです。

制御ヘッダ（dcmudp_dc_header）は<dcmudpu.h>に，次のように定義されています。

typedef struct {
   unsigned  char   r_exipaddr[12];       …予備
   DCULONG          r_ipaddr;             …相手IPアドレス
   unsigned  char   rsv1[2];              …予備
   unsigned  short  r_portno;             …相手ポート番号
   unsigned  char   rsv2[4];              …予備
} dcmudp_dc_header;

相手IPアドレスと相手ポート番号の設定方法については，「2.1.3　通信相手のアドレスの指定」を参照してください。

UAPで値を設定する引数

●action

単一セグメントを送信すること，および使用するバッファ形式を次の形式で指定します。

DCMCFEMI〔|｛DCMCFBUF1|DCMCFBUF2｝〕

DCMCFEMI

単一セグメントを示すDCMCFEMIを設定します。

DCMCFBUF1

バッファ形式1を使用する場合に設定します。

DCMCFBUF2

バッファ形式2を使用する場合に設定します。

●commform

DCNOFLAGSを設定します。

●termnam

出力先の論理端末名称を設定します。論理端末名称の長さは最大8バイトです。論理端末名称の後ろにはヌル文字を付けてください。

●resv01

ヌル文字を設定します。

●senddata

送信するセグメントの内容を設定した送信領域を設定します。制御ヘッダの24バイトを含めて32000バイトまで送信できます。

送信領域の制御ヘッダ内の予備領域は必ずすべて0に設定してください。

●sdataleng

送信するセグメントの長さを設定します。

●resv02

ヌル文字を設定します。

●opcd

DCNOFLAGSを設定します。

●watchtime

TP1/NET/UDPでは時間監視を行わないため，負の値を設定してください。

リターン値

リターン値
リターン値
（数値）
意味

DCMCFRTN_00000
0
正常に終了しました。

DCMCFRTN_71002
-12002
sdatalengに32000バイトを超える値を設定しています。

MCFが終了処理中のため，メッセージの送信を受け付けられません。

DCMCFRTN_71003
-12003
メッセージキューが満杯です。

DCMCFRTN_71004
-12004
メッセージを格納するバッファをメモリ上に確保できませんでした。

DCMCFRTN_71108
-12108
メッセージを送信しようとしましたが，送信先の管理テーブルが確保できませんでした。

プロセスのローカルメモリが不足しています。

DCMCFRTN_72000
-13000
先頭セグメントを受信するdc_mcf_receive関数を呼び出す前に，dc_mcf_sendsync関数を呼び出しています。

DCMCFRTN_72001
-13001
termnamに設定した論理端末名称が間違っています。

termnamに設定した出力先の論理端末名称は，MCFで定義していません。

dc_mcf_sendsync関数を呼び出せない論理端末を設定しています。

DCMCFRTN_72016
-13016
actionに設定した値が間違っています。

opcdに設定した値が間違っています。

resv01またはresv02に設定した値が間違っています。

引数に設定した値に間違いがあります。

DCMCFRTN_72024
-13024
commformに設定した値が間違っています。

DCMCFRTN_72026
-13026
actionに設定したセグメント種別（DCMCFEMI）の値が間違っています。

DCMCFRTN_72041
-13041
sdatalengに0，またはマイナス値を設定しています。

DCMCFRTN_73001
-14001
出力先の論理端末で障害が発生しました。

DCMCFRTN_73010
-14010
出力メッセージ編集UOCで障害が発生しました。

メッセージの読み込み時に障害が発生しました。

DCMCFRTN_73011
-14011
sdatalengに1以上24以下の値を設定しています。

DCMCFRTN_73019
-14019
システムに対する送信時に障害が発生しました。

DCMCFRTN_73020
-14020
出力先の論理端末は閉塞しています。

上記以外
－
プログラムの破壊などによる，予期しないエラーが発生しました。

（凡例）

－：該当しません。

注意事項

同一論理端末上で，同期型メッセージの送信と一方送信メッセージの送信を併用するのは避けてください。詳細は，この章の「dc_mcf_send － 一方送信メッセージの送信（C言語）」を参照してください。

CBLDCMCF('RECEIVE ') － 一方送信メッセージの受信（COBOL言語）

形式

PROCEDURE DIVISIONの指定

CALL 'CBLDCMCF' USING 一意名1 一意名2 一意名3

DATA DIVISIONの指定

01  一意名1.
   02  データ名A    PIC X(8)  VALUE 'RECEIVE '.
   02  データ名B    PIC X(5).
   02  FILLER      PIC X(3).
   02  データ名C    PIC X(4).
   02  データ名D    PIC X(4)  VALUE SPACE.
   02  データ名E    PIC 9(8).
   02  データ名F    PIC 9(8).
   02  データ名G    PIC 9(9)  COMP.
   02  データ名H    PIC X(4)  VALUE SPACE.
   02  データ名I    PIC X(4)  VALUE SPACE.
   02  データ名J   PIC X(4)  VALUE SPACE.
   02  データ名K    PIC X(4)  VALUE SPACE.
   02  データ名L    PIC X(8)  VALUE SPACE.
   02  データ名M1   PIC X(4)  VALUE SPACE.
   02  データ名M2   PIC X(8)  VALUE SPACE.
   02  データ名M3   PIC X(4)  VALUE SPACE.
   02  データ名M4   PIC 9(9)  COMP VALUE ZERO.
   02  データ名M5   PIC 9(9)  COMP VALUE ZERO.
   02  データ名M6   PIC X(1)  VALUE SPACE.
   02  データ名M7   PIC X(1).
   02  データ名N    PIC X(14)  VALUE LOW-VALUE.
01  一意名2.
   02  データ名O    PIC X(4)  VALUE SPACE.
   02  データ名P    PIC X(8).
   02  データ名Q    PIC X(8).
   02  データ名R    PIC X(8)  VALUE SPACE.
   02  データ名T    PIC X(28)  VALUE LOW-VALUE.
01  一意名3.
   02  データ名U    PIC 9(x)  COMP.
   02  データ名V    PIC X(x).
   02  データ名W1   PIC X(12)  VALUE LOW-VALUE.
   02  データ名W2   PIC X(4).
   02  データ名W3   PIC X(2)  VALUE LOW-VALUE.
   02  データ名W4   PIC X(2).
   02  データ名W5   PIC X(4)  VALUE LOW-VALUE.
   02  データ名W6   PIC X(n).

機能

論理端末に届いたメッセージのうち，一つのセグメントを受信します。セグメントの数だけCBLDCMCF('RECEIVE△')を呼び出すと，一つの論理メッセージを受信できます。

CBLDCMCF('RECEIVE△')で受信できるメッセージの種類を次に示します。

相手システムから送信されたメッセージ

MCFイベント

アプリケーション起動で渡されたメッセージ

TP1/NET/UDPを使用して通信する場合，相手システムから送信されるメッセージは，常に単一セグメントで構成されます。

セグメントを受信する領域（一意名3で示す領域）の形式を次に示します。

相手IPアドレスと相手ポート番号の設定方法については，「2.1.3　通信相手のアドレスの指定」を参照してください。

UAPで値を設定するデータ領域

●データ名A

メッセージの受信を示す要求コードを「VALUE 'RECEIVE△'」と設定します。

●データ名C

メッセージの先頭セグメントを受信するかどうかを設定します。次のどちらかを設定します。

VALUE 'FRST'

先頭セグメントを受信する場合に設定します。論理メッセージが単一セグメントの場合も「VALUE 'FRST'」を設定してください。

VALUE 'SEG△'

中間セグメントまたは最終セグメントを受信する場合に設定します。

●データ名D

空白を設定します。

●データ名G

セグメントを受信する領域の長さを設定します。

●データ名H，データ名I，データ名J，データ名K，データ名L，データ名M1，データ名M2，データ名M3

空白を設定します。

●データ名M4，データ名M5

0を設定します。

●データ名M6

空白を設定します。

●データ名M7

使用するバッファ形式を指定します。

VALUE '1'

バッファ形式1を使用する場合に設定します。

VALUE '2'

バッファ形式2を使用する場合に設定します。

空白

省略されたものとして，「VALUE '1'」（バッファ形式1）が設定されます。

●データ名N

MCFで使用する領域です。

●データ名O

空白を設定します。

●データ名P

中間セグメントまたは最終セグメントを受信する場合，入力元の論理端末名称を設定します。先頭セグメントの受信時に返された論理端末名称を設定してください。

先頭セグメントの受信処理終了後，データ名PにはOpenTP1から値が返されます。

●データ名Q

MCFで使用する領域です。

●データ名R

空白を設定します。

●データ名T

MCFで使用する領域です。

●データ名V

【バッファ形式1の場合】 PIC X(8)

【バッファ形式2の場合】 PIC X(2)

MCFで使用する領域です。

●データ名W1，データ名W3，データ名W5

予備領域です。

OpenTP1から値が返されるデータ領域

●データ名B

ステータスコードが，5けたの数字で返されます。

●データ名E

メッセージを受信した日付がYYYYMMDD（YYYY：西暦年 MM：月 DD：日）の形式で返されます。

●データ名F

メッセージを受信した時刻がHHMMSS00（HH：時 MM：分 SS：秒00は固定）の形式で返されます。

●データ名P

先頭セグメントを受信する場合，入力元の論理端末名称が返されます。

中間セグメントまたは最終セグメントを受信する場合は，ここで返された論理端末名称をデータ名Pに設定します。

●データ名U

【バッファ形式1の場合】 PIC 9(9)

受信したセグメントの長さが返されます。

【バッファ形式2の場合】 PIC 9(4)

受信したセグメントの長さ＋4が返されます。

●データ名W2

送信元のIPアドレスが返されます。

●データ名W4

送信元のポート番号が返されます。

●データ名W6

受信したセグメントの内容が返されます。

ステータスコード

ステータスコード
意味

00000
正常に終了しました。

71000
先頭セグメントを受信するCBLDCMCF('RECEIVE△')を2回以上呼び出しています。中間セグメントまたは最終セグメントを受信する場合はデータ名Cに「VALUE 'SEG△'」を設定してCBLDCMCF('RECEIVE△')を呼び出してください。

71001
メッセージの最終セグメントを受信したあとで，次のセグメントを受信するCBLDCMCF('RECEIVE△')を呼び出しています。直前に呼び出したCBLDCMCF('RECEIVE△')でメッセージはすべて受信しました。
このステータスコードが返されたあとに，再びCBLDCMCF('RECEIVE△')を呼び出した場合は，ステータスコード72000が返されます。

71002
メッセージキューからの入力処理中に障害が発生しました。

メッセージキューが閉塞されています。

71108
プロセスのローカルメモリが不足しています。

72000
＜MHPの実行でリターンした場合＞

先頭セグメントを受信するCBLDCMCF('RECEIVE△')を呼び出す前に，中間セグメントまたは最終セグメントを受信するCBLDCMCF('RECEIVE△')を呼び出しています。先頭セグメントを受信する場合は，データ名Cに「VALUE 'FRST'」を設定してCBLDCMCF('RECEIVE△')を呼び出してください。

ステータスコード71001が返されたあとに，再びCBLDCMCF('RECEIVE△')を呼び出しています。

＜SPPの実行でリターンした場合＞
SPPではCBLDCMCF('RECEIVE△')を呼び出せません。

72001
データPに設定した論理端末名称が間違っています。

72013
データ名Gの指定値を超えるセグメントを受信しました。データ名Gの指定値を超えた部分は切り捨てられました。

32763バイトを超えるセグメントを受信しました。
32763バイトを超えた部分は切り捨てられました。

72016
データ名Dに設定した値が間違っています。

データ名Nまたはデータ名Tに設定した値が間違っています。

データ名M7に設定した値が間違っています。

72024
データ名Oに設定した値が間違っています。

72025
データ名Cに設定した値が間違っています。

72028
データ名Aに設定した値が間違っています。

72036
データ名Gの指定値が不足しています。バッファ形式1の場合は9バイト以上，バッファ形式2の場合は5バイト以上の領域を確保してください。

上記以外
プログラムの破壊などによる，予期しないエラーが発生しました。

CBLDCMCF('RESEND ') － メッセージの再送（COBOL言語）

形式

PROCEDURE DIVISIONの指定

CALL 'CBLDCMCF' USING 一意名1 一意名2 一意名3

DATA DIVISIONの指定

01  一意名1.
   02  データ名A    PIC X(8)  VALUE 'RESEND  '.
   02  データ名B    PIC X(5).
   02  FILLER        PIC X(3).
   02  データ名C    PIC X(4)  VALUE SPACE.
   02  データ名D    PIC X(4)  VALUE SPACE.
   02  データ名E    PIC 9(8).
   02  データ名F    PIC 9(8).
   02  データ名G    PIC 9(9)  COMP VALUE ZERO.
   02  データ名H    PIC X(4)  VALUE SPACE.
   02  データ名I    PIC X(4)  VALUE SPACE.
   02  データ名J    PIC X(4).
   02  データ名K    PIC X(4).
   02  データ名L    PIC X(8)  VALUE SPACE.
   02  データ名M1   PIC X(4)  VALUE SPACE.
   02  データ名M2   PIC X(8)  VALUE SPACE.
   02  データ名M3   PIC X(4)  VALUE SPACE.
   02  データ名M4   PIC 9(9)  COMP VALUE ZERO.
   02  データ名M5   PIC 9(9)  COMP VALUE ZERO.
   02  データ名M6   PIC X(1)  VALUE SPACE.
   02  データ名M7   PIC X(1)  VALUE SPACE.
   02  データ名N    PIC X(14)  VALUE LOW-VALUE.
01  一意名2.
   02  データ名O    PIC X(4)  VALUE 'OUT '.
   02  データ名P    PIC X(8).
   02  データ名Q    PIC X(8)  VALUE SPACE.
   02  データ名R    PIC X(8)  VALUE SPACE.
   02  データ名S    PIC X(28)  VALUE LOW-VALUE.
01  一意名3.
   02  データ名T    PIC X(8).
   02  データ名U    PIC X(4).
   02  データ名V    PIC 9(9) COMP.
   02  データ名W    PIC X(4).
   02  データ名X    PIC X(12)  VALUE LOW-VALUE.

機能

以前に送信したメッセージを，再び送信します。再送するメッセージは，以前に送信したメッセージとは別の，新しいメッセージとして扱います。どのメッセージを再送するかは，次に示す送信済みメッセージの情報で選択できます。

出力先の論理端末名称

メッセージ通番

メッセージ種別（一般の一方送信，優先の一方送信）

対象としたメッセージが以前に送信されていない場合は，CBLDCMCF（'RESEND△△'）はステータスコード70904を返します。また，メッセージキュー（ディスクキュー）内に対象のメッセージがない場合も，ステータスコード70904を返します。このため，使用するメッセージキューの種別ではディスクキューを指定するとともに，メッセージキューファイルの容量および保持メッセージ数（メッセージキューサービス定義のquegrpコマンドの-mオプションで指定）に余裕を持った値を指定してください。

UAPで値を設定するデータ領域

●データ名A

メッセージの再送を示す要求コード「VALUE 'RESEND△△'」を設定します。

●データ名C，データ名D

空白を設定します。

●データ名E，データ名F

MCFで使用する領域です。

●データ名G

0を設定します。

●データ名H，データ名I

空白を設定します。

●データ名J

一般として再送するか優先として再送するかを設定します。

VALUE 'NORM'

一般の一方送信メッセージとして再送する場合に設定します。

VALUE 'PRIO'

優先の一方送信メッセージとして再送する場合に設定します。

空白

省略されたものとして，「VALUE 'NORM'」（一般の一方送信メッセージとして再送）が設定されます。

●データ名K

再送するメッセージに出力通番を付け直すかどうかを設定します。

VALUE 'SEQ△'

再送するメッセージに出力通番を付け直す場合に設定します。

VALUE 'NSEQ'

再送するメッセージに出力通番を付け直さない場合に設定します。

空白

省略されたものとして，「VALUE 'NSEQ'」（出力通番を付け直さない）が設定されます。

●データ名L，データ名M1，データ名M2，データ名M3

空白を設定します。

●データ名M4，データ名M5

0を設定します。

●データ名M6，データ名M7

空白を設定します。

●データ名N

MCFで使用する領域です。

●データ名O

一方送信を示す「VALUE 'OUT△'」を設定します。

●データ名P

出力先の論理端末名称を設定します。論理端末名称の長さは最大8バイトです。8バイトに満たない名称を設定する場合は，後ろを空白で埋めてください。

●データ名Q，データ名R

空白を設定します。

●データ名S

MCFで使用する領域です。

●データ名T

再送するメッセージを検索するキーとして，以前に送信したメッセージの出力先の論理端末名称を設定します。論理端末名称の長さは最大8バイトです。8バイトに満たない名称を設定する場合は，後ろを空白で埋めてください。

●データ名U

再送するメッセージを検索するキーとして，以前に送信したメッセージの送信種別を設定します。

VALUE 'NORM'

一般の一方送信メッセージを対象とする場合に設定します。

VALUE 'PRIO'

優先の一方送信メッセージを対象とする場合に設定します。

空白

省略されたものとして，「VALUE 'NORM'」（一般の一方送信メッセージを対象）が設定されます。

「VALUE 'PRIO'」を設定した場合は，データ名Tに出力先の論理端末名称を設定できません。

●データ名V

再送するメッセージを検索するキーとして，以前に送信したメッセージの出力通番を設定します。データ名Wに「VALUE 'LAST'」を設定した場合は，ここに設定した値は無効になります。

●データ名W

最終出力通番を持つメッセージを再送するかどうかを設定します。

VALUE 'LAST'

最終出力通番を持つメッセージを再送する場合に設定します。この値を設定した場合は，データ名Vに設定した値は無効になります。

空白

データ名Vで設定した出力通番を持つメッセージを再送する場合に設定します。

●データ名X

MCFで使用する領域です。

OpenTP1から値が返されるデータ領域

●データ名B

ステータスコードが，5けたの数字で返されます。

ステータスコード

ステータスコード
意味

00000
正常に終了しました。

70904
該当するメッセージがありません。

70905
再送するメッセージのセグメントの長さが，UAP共通定義（mcfmuap -e）で指定した値を超えています。

71002
メッセージキューへの出力処理中に障害が発生しました。

メッセージキューが閉塞されています。

メッセージキューが割り当てられていません。

MCFが終了処理中のため，メッセージの再送を受け付けられません。

71003
メッセージキューが満杯です。

71004
メッセージキューから取り出したメッセージを格納するバッファ（作業領域）をメモリ上に確保できませんでした。

71108
メッセージを再送しようとしましたが，送信先の管理テーブルが確保できませんでした。

プロセスのローカルメモリが不足しています。

72000
＜MHPの実行でリターンした場合＞

先頭セグメントを受信するCBLDCMCF('RECEIVE△')を呼び出す前に，CBLDCMCF('RESEND△△')を呼び出しています。

非トランザクション属性のMHPから，CBLDCMCF('RESEND△△')を呼び出しています。

＜SPPの実行でリターンした場合＞
トランザクションでないSPPの処理から，CBLDCMCF('RESEND△△')を呼び出しています。

72001
データ名Pまたはデータ名Tに設定した論理端末名称が間違っています。

CBLDCMCF('RESEND△△')を呼び出せない論理端末を設定しています。

72016
データ名Jに設定した値が間違っています。

データ名M4に設定した値が間違っています。

データ名Uに設定した値が間違っています。

データ名N，データ名S，またはデータ名Xに設定した値が間違っています。

72017
データ名Kに設定した値が間違っています。

72019
データ名M6に設定した値が間違っています。

72024
データ名Oに設定した値が間違っています。

72028
データ名Aに設定した値が間違っています。

上記以外
プログラムの破壊などによる，予期しないエラーが発生しました。

注意事項

メッセージの再送時には，MCFマネジャ定義のUAP共通定義（mcfmuap）の-eオプションおよび-lオプションの指定値に注意してください。

-eオプション

-eオプションでは，CBLDCMCF（'RESEND△△'）で使用する作業領域の大きさを指定します。再送するメッセージのセグメントがこの作業領域より大きい場合，CBLDCMCF（'RESEND△△'）はメッセージを再送しないで，ステータスコード70905を返します。このため，-eオプションでは，CBLDCMCF（'RESEND△△'）で使用するセグメントの最大長よりも大きな値を設定しておいてください。

-lオプション

-lオプションでは，通番に関して指定します。この内容によって，メッセージキューファイル内に同じ通番を持つメッセージが同時に存在する場合があります。同じ通番を持つメッセージが存在する場合，どのメッセージを再送するか保証できません。

CBLDCMCF('SEND ') － 一方送信メッセージの送信（COBOL言語）

形式

PROCEDURE DIVISIONの指定

CALL 'CBLDCMCF' USING 一意名1 一意名2 一意名3

DATA DIVISIONの指定

01  一意名1.
   02  データ名A    PIC X(8)  VALUE 'SEND    '.
   02  データ名B    PIC X(5).
   02  FILLER       PIC X(3).
   02  データ名C    PIC X(4)  VALUE SPACE.
   02  データ名D    PIC X(4)  VALUE SPACE.
   02  データ名E    PIC 9(8).
   02  データ名F    PIC 9(8).
   02  データ名G    PIC 9(9)  COMP VALUE ZERO.
   02  データ名H    PIC X(4).
   02  データ名I    PIC X(4)  VALUE SPACE.
   02  データ名J    PIC X(4).
   02  データ名K    PIC X(4).
   02  データ名L    PIC X(8)  VALUE SPACE.
   02  データ名M1   PIC X(4)  VALUE SPACE.
   02  データ名M2   PIC X(8)  VALUE SPACE.
   02  データ名M3   PIC X(4)  VALUE SPACE.
   02  データ名M4   PIC 9(9)  COMP VALUE ZERO.
   02  データ名M5   PIC 9(9)  COMP VALUE ZERO.
   02  データ名M6   PIC X(1)  VALUE SPACE.
   02  データ名M7   PIC X(1).
   02  データ名N    PIC X(14)  VALUE LOW-VALUE.
01  一意名2.
   02  データ名O    PIC X(4)  VALUE 'OUT '.
   02  データ名P    PIC X(8).
   02  データ名Q    PIC X(8)  VALUE SPACE.
   02  データ名R    PIC X(8)  VALUE SPACE.
   02  データ名T    PIC X(28)  VALUE LOW-VALUE.
01  一意名3.
   02  データ名U    PIC 9(x)  COMP.
   02  データ名V    PIC X(x).
   02  データ名W1   PIC X(12)  VALUE LOW-VALUE.
   02  データ名W2   PIC X(4).
   02  データ名W3   PIC X(2)  VALUE LOW-VALUE.
   02  データ名W4   PIC X(2).
   02  データ名W5   PIC X(4)  VALUE LOW-VALUE.
   02  データ名W6   PIC X(n).

機能

相手システムへ一方送信メッセージを送信します。一方送信メッセージは，一つのセグメントで構成されます。

セグメントを送信する領域（一意名3で示す領域）の形式を次に示します。

相手IPアドレスと相手ポート番号の設定方法については，「2.1.3　通信相手のアドレスの指定」を参照してください。

UAPで値を設定するデータ領域

●データ名A

一方送信メッセージの送信を示す要求コード「VALUE 'SEND△△△△'」を設定します。

●データ名C，データ名D

空白を設定します。

●データ名E，データ名F

MCFで使用する領域です。

●データ名G

0を設定します。

●データ名H

単一セグメントの送信を示す「VALUE 'EMI△'」を設定します。

●データ名I

空白を設定します。

●データ名J

一般として送信するか優先として送信するかを設定します。

VALUE 'NORM'

一般の一方送信メッセージとして送信する場合に設定します。

VALUE 'PRIO'

優先の一方送信メッセージとして送信する場合に設定します。

空白

省略されたものとして，「VALUE 'NORM'」（一般の一方送信メッセージとして送信）が設定されます。

●データ名K

出力通番を付けるかどうかを設定します。

VALUE 'SEQ△'

出力通番が必要な場合に設定します。

VALUE 'NSEQ'

出力通番が必要ない場合に設定します。

空白

省略されたものとして，「VALUE 'NSEQ'」（出力通番は付けない）が設定されます。

●データ名L，データ名M1，データ名M2，データ名M3

空白を設定します。

●データ名M4，データ名M5

0を設定します。

●データ名M6

空白を設定します。

●データ名M7

使用するバッファ形式を指定します。

VALUE '1'

バッファ形式1を使用する場合に設定します。

VALUE '2'

バッファ形式2を使用する場合に設定します。

空白

省略されたものとして，VALUE '1'（バッファ形式1）が設定されます。

●データ名N

MCFで使用する領域です。

●データ名O

一方送信を示す「VALUE 'OUT△'」を設定します。

●データ名P

出力先の論理端末名称を設定します。論理端末名称の長さは最大8バイトです。8バイトに満たない名称を設定する場合は，後ろを空白で埋めてください。

●データ名Q，データ名R

空白を設定します。

●データ名T

MCFで使用する領域です。

●データ名U

【バッファ形式1の場合】 PIC 9(9)

送信するセグメントの長さ＋24（制御ヘッダ）を設定します。

【バッファ形式2の場合】 PIC 9(4)

送信するセグメントの長さ＋28（制御ヘッダ，データ名U，データ名V）を設定します。

●データ名V

【バッファ形式1の場合】 PIC X(8)

【バッファ形式2の場合】 PIC X(2)

MCFで使用する領域です。

●データ名W1，データ名W3，データ名W5

0を設定します。

●データ名W2

送信相手のIPアドレスを設定します。

設定方法については，「2.1.3　通信相手のアドレスの指定」を参照してください。

●データ名W4

送信相手のポート番号を設定します。

設定方法については，「2.1.3　通信相手のアドレスの指定」を参照してください。

●データ名W6

送信するセグメントの内容を設定します。一つのセグメントで31976バイトまで送信できます。

OpenTP1から値が返されるデータ領域

●データ名B

ステータスコードが，5けたの数字で返されます。

ステータスコード

ステータスコード
意味

00000
正常に終了しました。

71002
メッセージキューへの出力処理中に障害が発生しました。

メッセージキューが閉塞されています。

メッセージキューが割り当てられていません。

データ名Uに32000バイトを超える値を設定しています。

MCFが終了処理中のため，メッセージの送信を受け付けられません。

71003
メッセージキューが満杯です。

71004
メッセージを格納するバッファをメモリ上に確保できませんでした。

71108
メッセージを送信しようとしましたが，送信先の管理テーブルが確保できませんでした。

プロセスのローカルメモリが不足しています。

72000
＜MHPの実行でリターンした場合＞
先頭セグメントを受信するCBLDCMCF（'RECEIVE△'）を呼び出す前に，CBLDCMCF（'SEND△△△△'）を呼び出しています。

＜SPPの実行でリターンした場合＞
トランザクションでないSPPの処理から，CBLDCMCF（'SEND△△△△'）を呼び出しています。

72001
データ名Pに設定した論理端末名称が間違っています。

CBLDCMCF('SEND△△△△')を呼び出せない論理端末を設定しています。

72016
データ名Jに設定した値が間違っています。

データ名M1に設定した値が間違っています。

データ名M7に設定した値が間違っています。

データ名Nまたはデータ名Tに設定した値が間違っています。

72017
データ名Kに設定した値が間違っています。

72019
データ名M6に設定した値が間違っています。

72020
データ名Iに設定した値が間違っています。

72024
データ名Oに設定した値が間違っています。

72026
データ名Hに設定した値が間違っています。

72028
データ名Aに設定した値が間違っています。

72041
バッファ形式1の場合はデータ名Uに0以下，またはマイナスの値を設定しています。バッファ形式2の場合はデータ名Uに4以下，またはマイナスの値を設定しています。

上記以外
プログラムの破壊などによる，予期しないエラーが発生しました。

注意事項

同一論理端末上で，同期型メッセージの送信と一方送信メッセージの送信を併用するのは避けてください。詳細は，この章の「dc_mcf_send － 一方送信メッセージの送信（C言語）」を参照してください。

CBLDCMCF('SENDSYNC') － 同期型メッセージの送信（COBOL言語）

形式

PROCEDURE DIVISIONの指定

CALL 'CBLDCMCF' USING 一意名1 一意名2 一意名3

DATA DIVISIONの指定

01  一意名1.
   02  データ名A    PIC X(8)  VALUE 'SENDSYNC'.
   02  データ名B    PIC X(5).
   02  FILLER        PIC X(3).
   02  データ名C    PIC X(4)  VALUE SPACE.
   02  データ名D    PIC X(4)  VALUE SPACE.
   02  データ名E    PIC 9(8).
   02  データ名F    PIC 9(8).
   02  データ名G    PIC 9(9)  COMP VALUE ZERO.
   02  データ名H    PIC X(4)  VALUE 'EMI '.
   02  データ名I    PIC X(4)  VALUE SPACE.
   02  データ名J    PIC X(4)  VALUE SPACE.
   02  データ名K    PIC X(4)  VALUE SPACE.
   02  データ名L    PIC X(8)  VALUE SPACE.
   02  データ名M1   PIC X(4)  VALUE SPACE.
   02  データ名M2   PIC X(8)  VALUE SPACE.
   02  データ名M3   PIC X(4)  VALUE SPACE.
   02  データ名M4   PIC 9(9)  COMP VALUE ZERO.
   02  データ名M5   PIC 9(9)  COMP.
   02  データ名M6   PIC X(1)  VALUE SPACE.
   02  データ名M7   PIC X(1).
   02  データ名N    PIC X(14)  VALUE LOW-VALUE.
01  一意名2.
   02  データ名O    PIC X(4)  VALUE SPACE.
   02  データ名P    PIC X(8).
   02  データ名Q    PIC X(8)  VALUE SPACE.
   02  データ名R    PIC X(8)  VALUE SPACE.
   02  データ名T    PIC X(28)  VALUE LOW-VALUE.
01  一意名3.
   02  データ名U    PIC 9(x)  COMP.
   02  データ名V    PIC X(x).
   02  データ名W1   PIC X(12)  VALUE LOW-VALUE.
   02  データ名W2   PIC X(4).
   02  データ名W3   PIC X(2)  VALUE LOW-VALUE.
   02  データ名W4   PIC X(2).
   02  データ名W5   PIC X(4)  VALUE LOW-VALUE.
   02  データ名W6   PIC X(n).

機能

相手システムへ同期型でメッセージを送信します。メッセージは，一つのセグメントで構成されます。

セグメントを送信する領域（一意名3で示す領域）の形式を次に示します。

相手IPアドレスと相手ポート番号の設定方法については，「2.1.3　通信相手のアドレスの指定」を参照してください。

UAPで値を設定するデータ領域

●データ名A

同期型メッセージの送信を示す要求コードを「VALUE 'SENDSYNC'」と設定します。

●データ名C，データ名D

空白を設定します。

●データ名E，データ名F

MCFで使用する領域です。

●データ名G

0を設定します。

●データ名H

単一セグメントの送信を示す「VALUE 'EMI△'」を設定します。

●データ名I，データ名J，データ名K，データ名L，データ名M1，データ名M2，データ名M3

空白を設定します。

●データ名M4

0を設定します。

●データ名M5

CBLDCMCF('SENDSYNC')を呼び出しから終了するまでの監視時間を設定します。TP1/NET/UDPでは時間監視を行わないため，負の値を設定してください。

●データ名M6

空白を設定します。

●データ名M7

使用するバッファ形式を指定します。

VALUE '1'

バッファ形式1を使用する場合に設定します。

VALUE '2'

バッファ形式2を使用する場合に設定します。

空白

省略されたものとして，VALUE '1'（バッファ形式1）が設定されます。

●データ名N

MCFで使用する領域です。

●データ名O

空白を設定します。

●データ名P

出力先の論理端末名称を設定します。論理端末名称の長さは最大8バイトです。8バイトに満たない名称を設定する場合は，後ろを空白で埋めてください。

●データ名Q，データ名R

空白を設定します。

●データ名T

MCFで使用する領域です。

●データ名U

【バッファ形式1の場合】 PIC 9(9)

送信するセグメントの長さ＋24（制御ヘッダ）を設定します。

【バッファ形式2の場合】 PIC9(4)

送信するセグメントの長さ＋28（制御ヘッダ，データ名U，データ名V）を設定します。

●データ名V

【バッファ形式1の場合】 PICX(8)

【バッファ形式2の場合】 PICX(2)

MCFで使用する領域です。

●データ名W1，W3，W5

0を設定します。

●データ名W2

送信相手のIPアドレスを設定します。

設定方法については，「2.1.3　通信相手のアドレスの指定」を参照してください。

●データ名W4

送信相手のポート番号を設定します。

設定方法については，「2.1.3　通信相手のアドレスの指定」を参照してください。

●データ名W6

送信するセグメントの内容を設定します。一つのセグメントで31976バイトまで送信できます。

OpenTP1から値が返されるデータ領域

●データ名B

ステータスコードが，5けたの数字で返されます。

ステータスコード

ステータスコード | 意味
00000 | 正常に終了しました。
71002 | データ名Uに32000バイトを超える値を設定しています。
MCFが終了処理中のため，メッセージの送信を受け付けられません。
71003 | メッセージキューが満杯です。
71004 | メッセージを格納するバッファをメモリ上に確保できませんでした。
71108 | メッセージを送信しようとしましたが，送信先の管理テーブルが確保できませんでした。
プロセスのローカルメモリが不足しています。
72000 | 先頭セグメントを受信するCBLDCMCF('RECEIVE△')を呼び出す前に，CBLDCMCF('SENDSYNC')を呼び出しています。
72001 | データPに設定した論理端末名称が間違っています。
データPに設定したメッセージ出力先の論理端末名称は，MCFで定義していません。
CBLDCMCF('SENDSYNC')を呼び出せない論理端末を設定しています。
72016 | データ名M1に設定した値が間違っています。
データ名M7に設定した値が間違っています。
データ名Nまたはデータ名Tに設定した値が間違っています。
72019 | データ名M6に設定した値が間違っています。
72024 | データ名Oに設定した値が間違っています。
72026 | データ名Hに設定した値が間違っています。
72028 | データ名Aに設定した値が間違っています。
72041 | バッファ形式1の場合はデータ名Uに0以下，またはマイナスの値を設定しています。バッファ形式2の場合はデータ名Uに4以下，またはマイナスの値を設定しています。
73001 | 出力先の論理端末で障害が発生しました。
73010 | 出力メッセージ編集UOCで障害が発生しました。
メッセージの読み込み時に障害が発生しました。
73011 | バッファ形式1の場合はデータ名Uに1以上24以下の値を設定しています。バッファ形式2の場合はデータ名Uに5以上28以下の値を設定しています。
73019 | システムに対する送信時に障害が発生しました。
73020 | 出力先の論理端末は閉塞しています。
上記以外 | プログラムの破壊などによる，予期しないエラーが発生しました。

注意事項

同一論理端末上で，同期型メッセージの送信と一方送信メッセージの送信を併用するのは避けてください。詳細は，この章の「dc_mcf_send － 一方送信メッセージの送信（C言語）」を参照してください。

RECEIVE － メッセージの受信（データ操作言語）

形式

DATA DIVISION（通信記述項）の指定

CD  通信記述名
  FOR  INPUT
〔STATUS  KEY  IS  データ名1〕
〔SYMBOLIC  TERMINAL  IS  データ名2〕
〔MESSAGE  DATE  IS  データ名3〕
〔MESSAGE  TIME  IS  データ名4〕.

PROCEDURE DIVISION（通信文）の指定

RECEIVE  通信記述名
   〔FIRST〕 SEGMENT
         INTO 一意名1.

機能

次に示すCALLインタフェースの機能を実現します。

一方送信メッセージの受信　CBLDCMCF('RECEIVE△')

通信記述項に設定する項目

●FOR 句

次の値を指定します。

INPUT

非同期型のメッセージの受信

●STATUS KEY 句

ステータスコードを受け取りたい場合に指定します。省略した場合は，ステータスコードを受け取りません。

●SYMBOLIC TERMINAL 句

入力元の論理端末名称を参照するデータ項目を指定します。

●MESSAGE DATE 句

メッセージを受信した日付を参照するデータ項目を指定します。YYMMDD（YY：西暦の下2けた　MM：月　DD：日）の形式で参照できます。

●MESSAGE TIME 句

メッセージを受信した時刻を参照するデータ項目を指定します。HHMMSS00（HH：時　MM：分　SS：秒　00は固定）の形式で参照できます。

通信文に指定する項目

●FIRST

先頭セグメントを受信する場合に指定します。

●一意名1

セグメントを受信するデータ項目を指定します。一意名1の形式を次に示します。

相手IPアドレスと相手ポート番号の設定方法については，「2.1.3　通信相手のアドレスの指定」を参照してください。

ステータスコード

ステータスコード
意味

00000
正常に終了しました。

71000
先頭セグメントを受信するRECEIVE文を，2回以上実行しています。中間セグメントまたは最終セグメントを受信する場合は，FIRSTを指定しないでRECEIVE文を実行してください。

71001
メッセージの最終セグメントを受信したあとで，次のセグメントを受信するRECEIVE文を実行しています。直前に実行したRECEIVE文でメッセージはすべて受信しました。
このステータスコードが返されたあとに，再びRECEIVE文を実行した場合は，ステータスコード72000が返されます。

71002
メッセージキューからの入力処理中に障害が発生しました。

メッセージキューが閉塞されています。

メッセージキューが割り当てられていません。

MCFが終了処理中のため，メッセージの受信を受け付けられません。

71108
メッセージ受信に必要な管理テーブルが確保できませんでした。

プロセスのローカルメモリが不足しています。

72000
＜MHPの実行でリターンした場合＞

先頭セグメントを受信するRECEIVE文を実行する前に，中間セグメントまたは最終セグメントを受信するRECEIVE文を実行しています。先頭セグメントを受信する場合は，FIRSTを指定してRECEIVE文を実行してください。

ステータスコード71001が返されたあとで，RECEIVE文を実行しています。

＜SPPの実行でリターンした場合＞
SPPではRECEIVE文を実行できません。

72001
SYMBOLIC TERMINAL句に設定した論理端末名称が間違っています。

RECEIVE文を実行できない論理端末を設定しています。

72013
一意名1のLの指定値を超えるセグメントを受信しました。一意名1のLの指定値を超える部分は切り捨てられました。

32763バイトを超えるセグメントを受信しました。32763バイトを超えた部分は切り捨てられました。

72020
SYNCHRONOUS MODE句に設定した値が間違っています。

72024
FOR句に設定した値が間違っています。

72036
一意名1のLが不足しています。5バイト以上の領域を確保してください。

上記以外
プログラムの破壊などによる，予期しないエラーが発生しました。

SEND － メッセージの送信（データ操作言語）

形式

DATA DIVISION（通信記述項）の指定

CD  通信記述名
  FOR  ｛OUTPUT｜I-O｝
〔STATUS  KEY  IS  データ名1〕
〔SYMBOLIC  TERMINAL  IS  データ名2〕
〔SYNCHRONOUS MODE  IS  ｛SYNC｜ASYNC｜データ名6｝〕
〔SWITCHING MODE IS ｛NORMAL｜PRIOR｜データ名7｝〕
〔DETAIL MODE IS データ名10〕.

PROCEDURE DIVISION（通信文）の指定

SEND  通信記述名  FROM  一意名1

機能

次に示すCALLインタフェースの機能を実現します。ただし，扱えるのは単一セグメントだけです。

一方送信メッセージの送信　CBLDCMCF('SEND△△△△')

同期型メッセージの送信　CBLDCMCF('SENDSYNC')

通信記述項に設定する項目

●FOR 句

次のどちらかの値を指定します。

OUTPUT

一方送信メッセージの送信

I-O

同期型メッセージの送信

I-Oを指定した場合，SYNCHRONOUS MODE句で同期型メッセージの送信（SYNC）を必ず指定してください。指定しなかった場合，SEND文はステータスコード（72000）を返します。

●STATUS KEY 句

ステータスコードを受け取りたい場合に指定します。省略した場合は，ステータスコードを受け取りません。

●SYMBOLIC TERMINAL 句

論理端末名称を設定したデータ項目を指定します。

●SYNCHRONOUS MODE 句

非同期型でメッセージを送信するか，同期型でメッセージを送信するかを指定します。

SYNC

同期型メッセージの送信

同期型メッセージ送信のとき指定します。

ASYNC

非同期型のメッセージ送信

一方送信メッセージの送信のとき指定します。

データ名6

次の値を設定したデータ項目

'0'：一方送信メッセージの送信

'1'：同期型メッセージ送信

省略した場合は，一方送信メッセージの送信（ASYNC）が設定されます。

●SWITCHING MODE 句

一方送信メッセージの場合に，一般か優先かを指定します。

NORMAL

一般の一方送信メッセージ

PRIOR

優先の一方送信メッセージ

データ名7

次の値を設定したデータ項目

'0'または'△'：一般の一方送信メッセージ

'1'：優先の一方送信メッセージ

省略した場合は，一般の一方送信メッセージ（NORMAL）が設定されます。

●DETAIL MODE 句

一方送信メッセージの場合に，出力通番を付けるかどうかを指定します。

データ名10

次の値を設定したデータ項目

'0'または'△'：出力通番を付けます。

'1'：出力通番を付けません。

省略した場合は，出力通番を付けません。

通信文に指定する項目

●一意名1

セグメントを送信するデータ項目を指定します。一つのセグメントで制御ヘッダの24バイトを含めて32000バイトまで送信できます。一意名1の形式を次に示します。

相手IPアドレスと相手ポート番号の設定方法については，「2.1.3　通信相手のアドレスの指定」を参照してください。

ステータスコード

ステータスコード
意味

00000
正常に終了しました。

71002
メッセージキューへの出力処理中に障害が発生しました。

メッセージキューが閉塞されています。

メッセージキューが割り当てられていません。

一意名1のLに32000バイトを超える値を設定しています。

MCFが終了処理中のため，メッセージの送信を受け付けられません。

71003
メッセージキューが満杯です。

71004
メッセージを格納するバッファをメモリ上に確保できませんでした。

71108
メッセージを送信しようとしましたが，送信先の管理テーブルが確保できませんでした。

プロセスのローカルメモリが不足しています。

72000
FOR句にI-Oを設定していますが，SYNCHRONOUS MODE句でSYNCを設定していません。

＜MHPの実行でリターンした場合＞
先頭セグメントを受信するRECEIVE文を実行する前に，SEND文を実行しています。

＜SPPの実行でリターンした場合＞
トランザクションでないSPPの処理から，SEND文を実行しています。

72001
SYMBOLIC TERMINAL句に設定した論理端末名称が間違っています。

SEND文を実行できない論理端末を設定しています。

72017
DETAIL MODE句に設定した値が間違っています。

72018
SWITCHING MODE句に設定した値が間違っています。

72020
SYNCHRONOUS MODE句に設定した値が間違っています。

72024
FOR句に設定した値が間違っています。

72041
一意名1のLに4以下，またはマイナスの値を設定しています。

73001
出力先の論理端末で障害が発生しました。

73010
出力メッセージ編集UOCで障害が発生しました。

メッセージの読み込み時に障害が発生しました。

73011
一意名1のLに5以上28以下の値を設定しています。

73019
システムに対する送信時に障害が発生しました。

73020
出力先の論理端末は閉塞しています。

上記以外
プログラムの破壊などによる，予期しないエラーが発生しました。

注意事項

データ操作言語のSEND文を使用してメッセージを送信する場合は，時間監視を行いません。したがって，MCFマネジャ定義のUAP共通定義（mcfmuapコマンド）で同期送信監視時間を指定する際には，0を指定してください。

同一論理端末上で，同期型メッセージの送信と一方送信メッセージの送信を併用するのは避けてください。詳細は，この章の「dc_mcf_send － メッセージの送信（C言語）」を参照してください。

ユーザアプリケーションプログラム作成例

メッセージ送受信の処理の流れを次の図に示し，その流れに沿ったコーディング例をC言語（K&R版）で示します。

図3-1　処理の流れ

注※

端末から受信したメッセージがブロードキャストメッセージまたはマルチキャストメッセージの場合は，メッセージ受信後の処理は不要です。

なお，TP1/NET/UDPでは，UAP1～UAP4に対応するC言語（K&R版）のコーディング例を次のファイルで提供しています。

メッセージ受信処理とユニキャストメッセージ送信（UAP1）

適用OSがLinuxの場合

/opt/OpenTP1/examples/mcf/UDPIP/aplib/c/ap1.c

その他のOSの場合

/BeTRAN/examples/mcf/UDPIP/aplib/c/ap1.c

ユニキャストメッセージ送信（UAP2）

適用OSがLinuxの場合

/opt/OpenTP1/examples/mcf/UDPIP/aplib/c/ap2.c

その他のOSの場合

/BeTRAN/examples/mcf/UDPIP/aplib/c/ap2.c

ブロードキャストメッセージ送信（UAP3）

適用OSがLinuxの場合

/opt/OpenTP1/examples/mcf/UDPIP/aplib/c/ap3.c

その他のOSの場合

/BeTRAN/examples/mcf/UDPIP/aplib/c/ap3.c

マルチキャストメッセージ送信（UAP4）

適用OSがLinuxの場合

/opt/OpenTP1/examples/mcf/UDPIP/aplib/c/ap4.c

その他のOSの場合

/BeTRAN/examples/mcf/UDPIP/aplib/c/ap4.c

メッセージ受信処理とユニキャストメッセージ送信（UAP1）

#include <stdio.h>
#include <string.h>
#include <sys/types.h>
#include <netinet/in.h>
#include <dcmcf.h>
#include <dcmudpu.h>

#define SEND_ADDR   0xC20B2A15   /* 0xC20B2A15 == 194.11.42.21 */
#define BRD_PORT    0x4E2A       /* 0x4E2A     == 20010        */
#define MLT_PORT    0x4E2B       /* 0x4E2B     == 20011        */
#define UNI_PORT    0x4E2C       /* 0x4E2C     == 20012        */
#define SRV_MSGSIZE    480
typedef struct srvmsg_s{
   char    mcfarea[8];             /*   8bytes == DCMCFBUF1   */
   dcmudp_dc_header dchead;        /*  24bytes                */
   char    srv_msg[SRV_MSGSIZE];   /* 480bytes == SRV_MSGSIZE */
} srvmsg_def;                       /* 512bytes                */

void    ex_uap1() {
   DCLONG          action;
   static DCLONG   commform   = DCNOFLAGS;
   char            termnam[16];
   static   char   resv01[16] = "¥0";
   static   char   resv02[16] = "¥0";
   srvmsg_def      srvdata_area;
   char            *recvdata;
   char            *senddata;
   DCLONG          sdataleng;
   DCLONG          rdataleng;
   DCLONG          inbufleng;
   static DCLONG   opcd       = DCNOFLAGS;
   static DCLONG   watchtime  = -1;
   DCLONG          time;
   int             rtn;

   recvdata = (char *)&srvdata_area;
   senddata = (char *)&srvdata_area;

   (void)memset((void *)&srvdata_area,
                0x00,
                sizeof(srvdata_area));

   action   = DCMCFFRST;

   inbufleng = sizeof(srvdata_area);

   rtn = dc_mcf_receive(action,
                        commform,
                        termnam,
                        resv01,
                        recvdata,
                        &rdataleng,
                        inbufleng,
                        &time);

   if( DCMCFRTN_00000 == rtn ) {
       if( SEND_ADDR == ntohl(srvdata_area.dchead.r_ipaddr) ) {
           switch( ntohs(srvdata_area.dchead.r_portno) ) {
           case BRD_PORT:
               /***********************************************/
               /*  User Service Part.                         */
               /***********************************************/
               break;

           case MLT_PORT:
               /***********************************************/
               /*  User Service Part.                         */
               /***********************************************/
               break;

           case UNI_PORT:
               /***********************************************/
               /*  User Service Part.                         */
               /***********************************************/
               action   = DCMCFEMI;
               sdataleng = rdataleng;
               rtn = dc_mcf_sendsync(action,
                                     commform,
                                     termnam,
                                     resv01,
                                     senddata,
                                     sdataleng,
                                     resv02,
                                     opcd,
                                     watchtime);

               if( DCMCFRTN_00000 == rtn) {
                   /*******************************************/
                   /*  User Service Part.                     */
                   /*******************************************/
               } else {
                   /*******************************************/
                   /*  User Service Part.                     */
                   /*******************************************/
               }
               break;

           default:
               /***********************************************/
               /*  User Service Part.                         */
               /***********************************************/
               break;
           }
       } else {
               /***********************************************/
               /*  User Service Part.                         */
               /***********************************************/
       }
   } else {
       /************************************************/
       /*  User Service Part.                          */
       /************************************************/
   }
   return;
}

ユニキャストメッセージ送信（UAP2）

#include <stdio.h>
#include <string.h>
#include <sys/types.h>
#include <netinet/in.h>
#include <dcmcf.h>
#include <dcmudpu.h>

#define SEND_ADDR   0xC20B2A16   /* 0xC20B2A16 == 194.11.42.22 */
#define SEND_PORT   0x4E2D       /* 0x4E2D     == 20013        */
#define SRV_MSGSIZE    480
typedef struct srvmsg_s{
   char    mcfarea[8];             /*   8bytes == DCMCFBUF1   */
   dcmudp_dc_header dchead;        /*  24bytes                */
   char    srv_msg[SRV_MSGSIZE];   /* 480bytes == SRV_MSGSIZE */
} srvmsg_def;                       /* 512bytes                */

void    ex_uap2() {
   static DCLONG   action     = DCMCFEMI;
   static DCLONG   commform   = DCNOFLAGS;
   static   char   *termnam   = "leid04";
   static   char   resv01[16] = "¥0";
   static   char   resv02[16] = "¥0";
   static DCLONG   opcd       = DCNOFLAGS;
   static DCLONG   watchtime  = -1;
   char            *senddata;
   srvmsg_def      senddata_area;
   DCLONG          sdataleng;
   int             rtn;

   senddata = (char *)&senddata_area;
   (void)memset((void *)&senddata_area,
                0x00,
                (size_t)sizeof(senddata_area));

   /************************************************/
   /*  User Service Part.                          */
   /************************************************/

   sdataleng = sizeof(senddata_area)
               - sizeof(senddata_area.mcfarea);

   senddata_area.dchead.r_ipaddr = htonl(SEND_ADDR);

   senddata_area.dchead.r_portno = htons(SEND_PORT);

   rtn = dc_mcf_sendsync(action,
                         commform,
                         termnam,
                         resv01,
                         senddata,
                         sdataleng,
                         resv02,
                         opcd,
                         watchtime);

   if( DCMCFRTN_00000 == rtn) {
       /************************************************/
       /*  User Service Part.                          */
       /************************************************/
   } else {
       /************************************************/
       /*  User Service Part.                          */
       /************************************************/
   }
   return;
}

ブロードキャストメッセージ送信（UAP3）

#include <stdio.h>
#include <string.h>
#include <sys/types.h>
#include <netinet/in.h>
#include <dcmcf.h>
#include <dcmudpu.h>

#define SEND_PORT      0x4E2E       /* 0x4E2E     == 20014     */
#define SRV_MSGSIZE    480
typedef struct srvmsg_s{
   char    mcfarea[8];             /*   8bytes == DCMCFBUF1   */
   dcmudp_dc_header dchead;        /*  24bytes                */
   char    srv_msg[SRV_MSGSIZE];   /* 480bytes == SRV_MSGSIZE */
} srvmsg_def;                       /* 512bytes                */

void    ex_uap3(){
   static DCLONG   action     = DCMCFEMI;
   static DCLONG   commform   = DCNOFLAGS;
   static   char   *termnam   = "leid05";
   static   char   resv01[16] = "¥0";
   static   char   resv02[16] = "¥0";
   static DCLONG   opcd       = DCNOFLAGS;
   static DCLONG   watchtime  = -1;
   char            *senddata;
   srvmsg_def      senddata_area;
   DCLONG          sdataleng;
   int             rtn;

   senddata = (char *)&senddata_area;
   (void)memset((void *)&senddata_area,
                0x00,
                sizeof(senddata_area));

   /************************************************/
   /*  User Service Part.                          */
   /************************************************/

   sdataleng = sizeof(senddata_area)
               - sizeof(senddata_area.mcfarea);

   senddata_area.dchead.r_ipaddr = htonl(INADDR_BROADCAST);

   senddata_area.dchead.r_portno = htons(SEND_PORT);

   rtn = dc_mcf_sendsync(action,
                         commform,
                         termnam,
                         resv01,
                         senddata,
                         sdataleng,
                         resv02,
                         opcd,
                         watchtime);
   if( DCMCFRTN_00000 == rtn) {
       /************************************************/
       /*  User Service Part.                          */
       /************************************************/
   } else {
       /************************************************/
       /*  User Service Part.                          */
       /************************************************/
   }
   return;
}

マルチキャストメッセージ送信（UAP4）

#include <stdio.h>
#include <string.h>
#include <sys/types.h>
#include <netinet/in.h>
#include <dcmcf.h>
#include <dcmudpu.h>

#define SEND_ADDR     0xE0010203   /* 0xE0010203 == 224.1.2.3  */
#define SEND_PORT     0x4E2F       /* 0x4E2F     == 20015      */
#define SRV_MSGSIZE   480
typedef struct srvmsg_s{
   char    mcfarea[8];             /*   8bytes == DCMCFBUF1   */
   dcmudp_dc_header dchead;        /*  24bytes                */
   char    srv_msg[SRV_MSGSIZE];   /* 480bytes == SRV_MSGSIZE */
} srvmsg_def;                       /* 512bytes                */

void    ex_uap4() {
   static DCLONG   action     = DCMCFEMI;
   static DCLONG   commform   = DCNOFLAGS;
   static   char   *termnam   = "leid06";
   static   char   resv01[16] = "¥0";
   static   char   resv02[16] = "¥0";
   static DCLONG   opcd       = DCNOFLAGS;
   static DCLONG   watchtime  = -1;
   char            *senddata;
   srvmsg_def      senddata_area;
   DCLONG          sdataleng;
   int             rtn;

   senddata = (char *)&senddata_area;
   (void)memset((void *)&senddata_area,
                0x00,
                (size_t)sizeof(senddata_area));

   /************************************************/
   /*  User Service Part.                          */
   /************************************************/

   sdataleng = sizeof(senddata_area)
               - sizeof(senddata_area.mcfarea);

   senddata_area.dchead.r_ipaddr = htonl(SEND_ADDR);

   senddata_area.dchead.r_portno = htons(SEND_PORT);

   rtn = dc_mcf_sendsync(action,
                         commform,
                         termnam,
                         resv01,
                         senddata,
                         sdataleng,
                         resv02,
                         opcd,
                         watchtime);

   if( DCMCFRTN_00000 == rtn) {
       /************************************************/
       /*  User Service Part.                          */
       /************************************************/
   } else {
       /************************************************/
       /*  User Service Part.                          */
       /************************************************/
   }
   return;
}

4.　ユーザオウンコーディング，MCFイベントインタフェース

この章では，TP1/NET/UDPに関連するユーザオウンコーディング，およびMCFイベントのインタフェースについて説明します。

＜この章の構成＞

4.1　ユーザオウンコーディングインタフェース

4.2　MCFイベントインタフェース

4.1　ユーザオウンコーディングインタフェース

メッセージ送受信のUAPを，より多様な業務に対応させるために補助するプログラムをユーザオウンコーディング（UOC）といいます。独自の処理でメッセージを編集したり，アプリケーション名を決定したりする場合は，ユーザがUOCを作成してください。

TP1/NET/UDPで使用できるUOCを次に示します。

入力メッセージ編集UOC

出力メッセージ編集UOC

送信メッセージ通番編集UOC

UOCはC言語で作成します。UOCを使用する場合は，あらかじめMCFメイン関数またはUAPのメイン関数にUOC関数のアドレスを登録し，UOC関数のオブジェクトファイルをMCF通信プロセスまたはUAPの実行形式プログラムに結合（リンケージ）しておく必要があります。

＜この節の構成＞

4.1.1　入力メッセージの編集とアプリケーション名の決定

4.1.2　入力メッセージ編集UOCインタフェース

4.1.3　出力メッセージの編集

4.1.4　出力メッセージ編集UOCインタフェース

4.1.5　送信メッセージの通番編集

4.1.6　送信メッセージの通番編集UOCインタフェース

4.1.7　UOC作成上の注意事項

4.1.1　入力メッセージの編集とアプリケーション名の決定

入力メッセージ編集UOCは，受信した論理メッセージをユーザ任意の形式に変換します。また，受信した論理メッセージを基に，ユーザ任意のアプリケーション名を決定できます。

UOCは，MHPを起動するメッセージのセグメントを受信すると起動します。ただし，MCFイベント発生時と，UAPからのアプリケーションプログラム起動時はUOCは起動しません。

ユーザは，MCFメイン関数でUOC関数アドレスを設定します。また，必要に応じてMCF通信構成定義（mcftalcle -e）で，メッセージ編集用バッファグループ番号を定義します。

＜この項の構成＞

(1)　入力メッセージの編集

(2)　アプリケーション名の決定

(3)　UOCエラーリターン処理

(4)　UOCパラメタ不正の場合の処理

(5)　OpenTP1への組み込み方法

(1)　入力メッセージの編集

受信したメッセージが格納されている受信バッファ，およびMCF通信構成定義で指定した編集バッファを引き渡します。UOCでは，これらのバッファを使用して，入力メッセージの編集ができます。

また，UAPに通知するメッセージのセグメントは，受信バッファ，または編集バッファのどちらかに格納されたものを使用できます。どちらのセグメントを使用するかは，UOCから返されるリターンコードによって選択できます。

(2)　アプリケーション名の決定

該当するMCF通信プロセスに入力メッセージ編集UOCが登録されている場合，論理メッセージの受信と同時にアプリケーション名を決定できます。

UOCでアプリケーション名を決定する場合，アプリケーション名の形式は，アプリケーション名格納領域の先頭から，'¥0'の手前までの1～8バイトの英数字です。先頭から9バイト目までに'¥0'がないときは，アプリケーション名を不正とし，エラーイベント（ERREVT1）を起動します。

アプリケーション名の決定の処理は「2.2.5　アプリケーション名の決定」を参照してください。

(3)　UOCエラーリターン処理

UOCからDCMCF_UOC_MSG_NGでリターンした場合，MCFはメッセージログを出力し，障害通知イベント（CERREVT）を通知します。

UOCで障害を検出し，エラー処理UAPを起動したい場合は，ユーザ任意のエラー処理UAPのアプリケーション名を設定します。このとき，MCFにはDCMCF_UOC_MSG_OK，またはDCMCF_UOC_MSG_OK_RCVでリターンします。この場合，MCFは正常なメッセージとして処理するため，受信メッセージの破棄などの障害処理はしません。

(4)　UOCパラメタ不正の場合の処理

UOCで設定した値に不正があった場合，MCFはメッセージログを出力し，障害通知イベント（CERREVT）を通知します。

(5)　OpenTP1への組み込み方法

スタート関数（dc_mcf_svstart）を発行するMCFメイン関数に，作成したUOCの関数アドレスを設定します。入力メッセージの編集UOCの関数アドレスは任意に決められます。UOC関数をコンパイルして生成したUOCオブジェクトファイルを，UOC関数を登録したMCFメイン関数と結合して，TP1/NET/UDPの実行形式プログラムを生成します。MCFメイン関数の詳細については，「7.2　MCFメイン関数の作成」を参照してください。

4.1.2　入力メッセージ編集UOCインタフェース

入力メッセージ編集UOCは，次に示す形式で呼び出します。

＜この項の構成＞

(1)　形式

(2)　説明

(3)　パラメタの内容

(4)　MCFが値を設定する項目

(5)　ユーザが値を設定する項目

(6)　リターン値

(7)　パラメタとバッファの関係

(1)　形式

ANSI C，C++の場合

#include <dcmcf.h>
#include <dcmcfuoc.h>
DCLONG   uoc_func(dcmcf_uoc_min_n *parm)

K&R版 Cの場合

#include <dcmcf.h>
#include <dcmcfuoc.h>
DCLONG   uoc_func(parm)

dcmcf_uoc_min_n  *parm ;

(2)　説明

uoc_func（入力メッセージ編集UOC）を呼び出すとき，MCFは次に示す所定のパラメタをparmに設定します。

(3)　パラメタの内容

(a)　dcmcf_uoc_min_nの内容

typedef struct {
   DCLONG pro_kind;               …プロトコル種別
   char   le_name[9];             …論理端末名称
   char   reserve1[7];            …予備
   DCLONG rcv_prim;               …受信サービスプリミティブ
   dcmcf_uocbuff_list_n *buflist_adr;
                                  …受信バッファリストアドレス
   dcmcf_uocbuff_list_n *ebuflist_adr;
                                  …編集バッファリストアドレス
   char   aplname[9];             …アプリケーション名
   char   reserve2[7];            …予備
   char   *pro_indv_ifa;          …MCF使用領域
   DCLONG rtn_detail;             …詳細リターンコード
   char   reserve3[8];            …予備
} dcmcf_uoc_min_n;

(b)　dcmcf_uocbuff_list_n（バッファリスト）の内容

   typedef struct {
   DCLONG buf_num;                …バッファ情報数
   DCLONG used_buf_num;           …使用バッファ情報数
   char   reserve1[8];            …予備
   dcmcf_uocbufinf_n buf_array[DCMCF_UOC_BUFF_MAX];
                                  …バッファ情報
} dcmcf_uocbuff_list_n;

(c)　dcmcf_uocbufinf_n（バッファ情報）の内容

typedef struct {
   char    *buf_adr;              …バッファアドレス
   DCULONG buf_size;              …バッファ最大長
   DCULONG seg_size;              …バッファ使用長
   char    reserve1[4];           …予備
   dcmcfuoc_w_type  buff_id;      …MCF使用領域
   DCMLONG buff_addr;             …MCF使用領域
   char    reserve2[4];           …予備
} dcmcf_uocbufinf_n;

(4)　MCFが値を設定する項目

(a)　dcmcf_uoc_min_n

pro_kind
プロトコル種別として，次の値が設定されます。

DCMCF_UOC_PRO_UDP

UDPプロトコル

le_name
メッセージを入力した論理端末の名称が設定されます。

rcv_prim
受信サービスプリミティブとして，次の値が設定されます。

DCMCF_UOC_RCV_BRD

一方受信メッセージ

buflist_adr
受信用バッファリストのアドレスが設定されます。

ebuflist_adr
編集用バッファリストのアドレスが設定されます。
メッセージ編集用バッファが未定義の場合，つまり，MCF通信構成定義のmcftalcleコマンドの-eオプションを省略した場合，ebuflist_adrにはNULLが設定されます。

aplname
MCF通信構成定義のmcftalcleコマンドの-vオプションで指定したアプリケーション名が設定されます。
MCF通信構成定義のmcftalcleコマンドの-vオプションを省略した場合，受信したメッセージに指定されたアプリケーション名が設定されます。このアプリケーション名は，メッセージの送信時に，制御ヘッダの直後に8バイト以内で設定された名称です。9バイト目までにデリミタ'0x20'（スペース）が設定されている必要があります。

(b)　dcmcf_uocbuff_list_n（バッファリスト）

buf_num
バッファ情報の数として1が設定されます。

buf_array
バッファ情報の配列が設定されます。バッファ情報は，buf_numの数だけ設定されます。

(c)　dcmcf_uocbufinf_n（バッファ情報）

buf_adr
バッファのアドレスが設定されます。

buf_size
バッファの最大長が設定されます。

seg_size
送信，または受信用バッファリストの場合だけ，バッファの使用長が設定されます。

buff_id，buff_addr
MCFで使用するパラメタです。

(5)　ユーザが値を設定する項目

(a)　dcmcf_uoc_min_n

aplname
UOCで決定したアプリケーション名を設定します。

rtn_detail
詳細リターンコードを設定します。
このコードは，UOCがDCMCF_UOC_MSG_NGをリターンしたときに，MCFに渡されます。MCFは，詳細リターンコードをメッセージログファイルに出力します。
詳細リターンコードは，-19999～-19000の範囲で設定してください。

(b)　dcmcf_uocbuff_list_n（バッファリスト）

used_buf_num
使用したバッファ情報の数を設定します。
使用バッファ情報数には，1を設定してください。

(c)　dcmcf_uocbufinf_n（バッファ情報）

seg_size
バッファの使用長を設定します。

(6)　リターン値

uoc_func()は次のコードでリターンしてください。

リターン値 | 意味
DCMCF_UOC_MSG_OK | 正常リターン（編集バッファでスケジューリング）
DCMCF_UOC_MSG_OK_RCV | 正常リターン（受信バッファでスケジューリング）
DCMCF_UOC_MSG_NG | メッセージ編集エラー

(7)　パラメタとバッファの関係

UOCインタフェース用のパラメタとバッファの関係を次の図に示します。

図4-1　UOCインタフェース用のパラメタとバッファの関係

注※1

MCF通信構成定義（mcftalcle -e）を指定しない場合，NULLとなり，バッファリストとバッファは確保されません。

注※2

バッファ情報は次の形式をしています。

4.1.3　出力メッセージの編集

出力メッセージの編集UOCは，送信する論理メッセージの編集をするUOCです。出力メッセージの編集UOCは，UAPが発行した送信メッセージを相手システムに実際に送信する前に処理するように位置させます。出力キューからセグメントを読み出すと起動します。

ユーザは，MCFメイン関数でUOC関数アドレスを設定します。また，必要に応じてMCF通信構成定義（mcftalcle -e）で，メッセージ編集用バッファグループ番号を定義します。

＜この項の構成＞

(1)　出力メッセージの編集

(2)　UOCエラーリターン処理

(3)　UOCパラメタ不正の場合の処理

(4)　OpenTP1への組み込み方法

(1)　出力メッセージの編集

送信するメッセージが格納されている送信バッファ，およびMCF通信構成定義で指定した編集バッファを引き渡します。UOCでは，これらのバッファを使用して，出力メッセージの編集処理ができます。

また，送信するメッセージのセグメントは，送信バッファ，または編集バッファのどちらかに格納されたものを使用できます。どちらのセグメントを使用するかは，UOCから返されるリターンコードによって選択できます。

(2)　UOCエラーリターン処理

UOCからDCMCF_UOC_MSG_NGでリターンした場合，MCFはメッセージログを出力し，障害通知イベント（CERREVT）を通知します。該当するメッセージは破棄します。

(3)　UOCパラメタ不正の場合の処理

UOCで設定した値に不正があった場合，MCFはメッセージログを出力し，障害通知イベント（CERREVT）を通知します。該当するメッセージは破棄します。

(4)　OpenTP1への組み込み方法

入力メッセージ編集UOCの組み込み方法と同じです。「4.1.1(5)　OpenTP1への組み込み方法」を参照してください。

4.1.4　出力メッセージ編集UOCインタフェース

出力メッセージ編集UOCは，次に示す形式で呼び出します。

＜この項の構成＞

(1)　形式

(2)　説明

(3)　パラメタの内容

(4)　MCFが値を設定する項目

(5)　ユーザが値を設定する項目

(6)　リターン値

(7)　パラメタとバッファの関係

(1)　形式

ANSI C，C++の場合

#include <dcmcf.h>
#include <dcmcfuoc.h>
DCLONG    uoc_func(dcmcf_uoc_mout_n *parm)

K&R版 Cの場合

#include <dcmcf.h>
#include <dcmcfuoc.h>
DCLONG    uoc_func(parm)

dcmcf_uoc_mout_n  *parm ;

(2)　説明

uoc_func（出力メッセージ編集UOC）を呼び出すとき，MCFは次に示す所定のパラメタをparmに設定します。

(3)　パラメタの内容

(a)　dcmcf_uoc_mout_nの内容

typedef struct {
   DCLONG pro_kind;               …プロトコル種別
   char   le_name[9];             …論理端末名称
   char   reserve1[7];            …予備
   dcmcf_uocbuff_list_n *buflist_adr;
                                  …送信バッファリストアドレス
   dcmcf_uocbuff_list_n *ebuflist_adr;
                                  …編集バッファリストアドレス
   DCLONG output_no;              …メッセージ出力通番
   char   msg_type;               …メッセージ種別
   char   outputno_flag;          …メッセージ出力通番有効フラグ
   char   resend_flag;            …再送メッセージフラグ
   char   reserve2[1];            …予備
   char   *pro_indv_ifa;          …MCF使用領域
   DCLONG rtn_detail;             …詳細リターンコード
   char   reserve3[20];           …予備
} dcmcf_uoc_mout_n;

(b)　dcmcf_uocbuff_list_n（バッファリスト），dcmcf_uocbufinf_n（バッファ情報）の内容

「4.1.2　入力メッセージ編集UOCインタフェース」を参照してください。

(4)　MCFが値を設定する項目

(a)　dcmcf_uoc_mout_n

pro_kind

プロトコル種別として，次の値が設定されます。

DCMCF_UOC_PRO_UDP

UDPプロトコル

le_name

メッセージを入力した論理端末の名称が設定されます。

buflist_adr

送信用バッファリストのアドレスが設定されます。

ebuflist_adr

編集用バッファリストのアドレスが設定されます。

メッセージ編集用バッファが未定義の場合，つまり，MCF通信構成定義のmcftalcleコマンドの-eオプションを省略した場合，ebuflist_adrにはNULLが設定されます。

output_no
メッセージ出力通番が設定されます。ただし，outputno_flagがDCMCF_UOC_OUTPUTNO_OKのときだけ有効です。

msg_type
メッセージ種別として，次の値が設定されます。

'n'

一般の一方送信メッセージ

'p'

優先の一方送信メッセージ

's'

同期型送信メッセージ

outputno_flag
メッセージ出力通番の有効フラグとして，次のどちらかの値が設定されます。

DCMCF_UOC_OUTPUTNO_OK

メッセージ出力通番を有効にします。

DCMCF_UOC_OUTPUTNO_NG

メッセージ出力通番を無効にします。

resend_flag
再送メッセージフラグとして，次のどちらかの値が設定されます。

'r'

再送メッセージです。

'n'

再送メッセージではありません。

pro_indv_ifa
MCFで使用するパラメタです。

(b)　dcmcf_uocbuff_list_n（バッファリスト），dcmcf_uocbufinf_n（バッファ情報）

「4.1.2　入力メッセージ編集UOCインタフェース」を参照してください。

(5)　ユーザが値を設定する項目

(a)　dcmcf_uoc_mout_n

rtn_detail
詳細リターンコードを設定します。
このコードは，UOCがDCMCF_UOC_MSG_NGをリターンしたときに，MCFに渡されます。MCFは，詳細リターンコードをメッセージログファイルに出力します。
詳細リターンコードは，-19999～-19000の範囲で設定してください。

(b)　dcmcf_uocbuff_list_n（バッファリスト），dcmcf_uocbufinf_n（バッファ情報）

「4.1.2　入力メッセージ編集UOCインタフェース」を参照してください。

(6)　リターン値

uoc_func()は次のコードでリターンしてください。

リターン値 | 意味
DCMCF_UOC_MSG_OK | 正常リターン（編集バッファでスケジューリング）
DCMCF_UOC_MSG_OK_SND | 正常リターン（送信バッファでスケジューリング）
DCMCF_UOC_MSG_NG | メッセージ編集エラー

(7)　パラメタとバッファの関係

UOCインタフェース用のパラメタとバッファの関係は，入力メッセージ編集UOCと同じです。「4.1.2(7)　パラメタとバッファの関係」を参照してください。

4.1.5　送信メッセージの通番編集

＜この項の構成＞

(1)　通番編集

(2)　OpenTP1への組み込み方法

(1)　通番編集

送信メッセージの通番編集UOCでは，受け取った通番を基に，ユーザ独自の処理ができます。例えば，通番を使用して編集した送信メッセージを再送要求します。

送信メッセージの通番編集UOCを起動する場合，メッセージ送信の関数で，出力通番を付けるように設定してください。送信メッセージの通番編集UOCは，UAPがsend関数またはresend関数を発行したときに，MCFによって起動されます。

(2)　OpenTP1への組み込み方法

UAPのメイン関数の中に，UOCの関数アドレスを登録しておきます。UAPのメイン関数に登録するdc_mcf_regster関数の形式を次に示します。

(a)　形式

ANSI C，C++の場合

#include <dcmcf.h>
int dc_mcf_regster(DCLONG flags, DCLONG (*uoc_addr)(DCLONG flags,
                  char *termname, DCLONG sendno, DCLONG sendid,
                  DCLONG dataleng, char *senddata))

K&R版 Cの場合

#include <dcmcf.h>
int dc_mcf_regster(flags, uoc_addr)
DCLONG flags;
DCLONG (*uoc_addr)();

(b)　ユーザが値を設定する引数

flags
DCMCF_SEND_UOCを指定します。

uoc_addr
flagsに対応するUOCのアドレスを指定します。

(c)　リターン値

リターン値 | 意味
DC_OK | 正常リターン
DCMCFER_INVALID_ARGS | 引数の指定が間違っています。
DCMCFER_NOMEM | ローカルメモリが不足しました。

(d)　メイン関数への登録例

UAPのメイン関数への登録例を次に示します。

SPPの場合

main()
{
   extern DCLONG send_uoc();

   dc_rpc_open();
   dc_mcf_open();
   dc_mcf_regster(DCMCF_SEND_UOC,send_uoc);
   dc_rpc_mainloop();
   dc_mcf_close();
   dc_rpc_close();
}

MHPの場合

main()
{
   extern DCLONG send_uoc();

   dc_rpc_open();
   dc_mcf_open();
   dc_mcf_regster(DCMCF_SEND_UOC,send_uoc);
   dc_mcf_mainloop();
   dc_mcf_close();
   dc_rpc_close();
}

4.1.6　送信メッセージの通番編集UOCインタフェース

送信メッセージの通番編集UOCは，次に示す形式で，send_uoc関数として作成します。なお，UOCの関数名称はユーザの任意です。

＜この項の構成＞

(1)　形式

(2)　MCFが値を設定する項目

(3)　リターン値

(1)　形式

ANSI C，C++の場合

#include <dcmcf.h>
DCLONG send_uoc(DCLONG flags, char *termname, DCLONG sendno,
               DCLONG sendid, DCLONG dataleng, char *senddata)

K&R版 Cの場合

#include <dcmcf.h>
DCLONG send_uoc(flags, termname, sendno, sendid, dataleng,
               senddata)
DCLONG         flags;
char           *termname;
DCLONG         sendno;
DCLONG         sendid;
DCLONG         dataleng;
char           *senddata;

(2)　MCFが値を設定する項目

flags
送信メッセージの通番編集UOCがいつ呼ばれたかが設定されます。

DCMCF_SEND_DML

メッセージを送信する関数または命令文が呼び出されたときを意味します。

DCMCF_RESEND_DML

メッセージを再送する関数または命令文が呼び出されたときを意味します。

termname
送信先の論理端末名称が設定されます。

sendno
送信メッセージの通番が設定されます。

sendid

DCMCF_SEND_PRIO

優先の一方送信メッセージ

DCMCF_SEND_NORM

一般の一方送信メッセージ

dataleng
送信メッセージ長が設定されます。

senddata
セグメントの内容が設定されます。

(3)　リターン値

リターン値 | 意味
DC_OK | 正常に終了しました。

4.1.7　UOC作成上の注意事項

UOC作成上の注意事項を次に示します。

＜この項の構成＞

(1)　UOCの構造

(2)　UOCで使用できる関数

(3)　UOCの異常処理

(4)　UOCの実行タイミング

(1)　UOCの構造

UOCで使用するローカル変数のサイズの合計は，各UOCで1024バイト以内になるよう設計してください。また，UOCの中で関数の再帰呼び出しはしないでください。

(2)　UOCで使用できる関数

UOCを作成する場合，UOCでは次に示す関数だけが使用できます。ほかの関数を使用した場合，正常に動作しないことがあるため，ご注意ください。

メモリ操作をする関数

データ領域管理（例：malloc，free）

共有メモリ管理関数／システムコール（例：shmctl，shmget，shmop）

メモリ操作（例：memcpy）

文字列操作（例：strcpy）

時間取得関数

(3)　UOCの異常処理

TP1/NET/UDPのUOCで異常を検出した場合，MCFの所定のリターンコードを使用して，MCFに異常の発生を通知してください。UOCでプロセス終了となるシグナル，またはabort()を発行すると，MCFが異常終了します。

(4)　UOCの実行タイミング

MCFが起動するUOCの実行タイミングは，OpenTP1システム，およびUAPの開始，終了シーケンスと同期しない場合があります。UAPより先にUOCが実行されたり，UAPがすべて終了してからUOCが実行されてもよいように作成してください。

4.2　MCFイベントインタフェース

OpenTP1でメッセージ送受信をすると，OpenTP1の各種システム情報がMHPに通知されます。これをMCFイベントといいます。メッセージ送受信処理でエラーや障害が発生した場合，システム内で何が起こっているのかがMCFイベントの内容でわかります。MCFイベントに対応するMHPをMCFイベント処理用MHPといいます。

MCFイベントは入力キューに渡されて，MCFイベント処理用MHPで回復処理をします。なお，MCFイベントの発生時は入力メッセージの編集UOCは呼び出しません。詳細については，マニュアル「OpenTP1 プログラム作成の手引」を参照してください。

＜この節の構成＞

4.2.1　MCFイベントの種類

4.2.2　MCFイベント通知時のセグメント構成

4.2.3　MCFイベント情報の形式（C言語）

4.2.4　MCFイベント情報の形式（COBOL言語）

4.2.1　MCFイベントの種類

TP1/NET/UDPが通知するMCFイベントの種類を次の表に示します。

表4-1　TP1/NET/UDPが通知するMCFイベントの種類

MCFイベント名
MCFイベントコード
発生した原因
MCFイベント処理用MHPでの処理の例

不正アプリケーション名検出通知イベント
ERREVT1
メッセージのアプリケーション名がMCFアプリケーション定義にありません。
該当するアプリケーション名がなかったことを報告します。

メッセージ廃棄通知イベント
ERREVT2
次の理由で，受信メッセージを廃棄しました。

入力キューに障害が発生しました。

MHPのサービス，サービスグループ，アプリケーションが閉塞しました。

MHPに受信したセグメントを渡す前にMHPの異常終了が発生しました。

アプリケーション名に相当するMHPのサービスがありません。

アプリケーションの即時起動時に障害が発生しました。

MHPのアプリケーション，サービスグループがセキュア状態です。

メッセージを廃棄したことを報告します。

UAP異常終了通知イベント
ERREVT3
MHPに受信したセグメントを渡したあとに，MHPの異常終了※が発生しました。
UAP異常終了時の対処障害メッセージを送信します。

タイマ起動メッセージ廃棄通知イベント
ERREVT4
アプリケーションのタイマ起動時に障害が発生しました。
メッセージを廃棄したことを報告します。

未処理送信メッセージ廃棄通知イベント
ERREVTA
次の理由で未処理送信メッセージを破棄しました。

MCFの正常終了処理時に，未処理送信メッセージの滞留時間監視の時間切れ（タイムアウト）が発生しました。

運用コマンド（mcftdlqle）の入力によって，出力キューが削除されました。

未処理送信メッセージを廃棄したことを報告します。

障害通知イベント
CERREVT
論理端末障害が発生しました。
論理端末に障害が発生したことを報告します。

状態通知イベント
COPNEVT
論理端末が閉塞解除しました。
論理端末が閉塞解除したことを報告します。

CCLSEVT
論理端末が正常に閉塞しました。
論理端末が閉塞したことを報告します。

注※

MCFアプリケーション定義（mcfaalcap -g）のrecvmsgオペランドにrを指定した場合，またはdc_mcf_rollbackのactionにDCMCFRTRYまたはDCMCFRRTNを指定した場合は除きます。

4.2.2　MCFイベント通知時のセグメント構成

MCFイベントをMHPに通知する場合，先頭セグメントにMCFイベント情報を設定します。エラーイベント（ERREVTn）の場合は，第2セグメントに処理できなかったメッセージセグメントを設定します。

MCFイベント通知時のセグメント構成を次の図に示します。

図4-2　MCFイベント通知時のセグメント構成

MCFイベントは，UAPを作成した言語によって，UAPに通知されるデータの形式が異なります。

エラーイベントの場合はバッファ形式1とバッファ形式2で先頭の内容が異なります。このため，それ以降の項目の位置にずれがあります。「4.2.4　MCFイベント情報の形式（COBOL言語）」のエラーイベントの表ではERREVT1，ERREVT2，ERREVT3およびERREVTAのバッファ形式別に位置（バイト）を分けて説明しています。なお，ERREVT4については，マニュアル「OpenTP1 プログラム作成リファレンス」の該当する言語編を参照してください。

4.2.3　MCFイベント情報の形式（C言語）

MCFイベント情報は構造体で，MCFイベント処理用MHPに渡されます。MHPに渡される構造体の形式は，MCFイベントの種類によって異なります。ただし，MCFイベント情報の先頭部分の形式は，各イベントに共通です。

エラーイベント（ERREVTn）で使用する構造体は，<dcmcf.h>で定義してあります。

COPNEVT，CCLSEVTおよびCERREVTで使用する構造体は，<dcmudpu.h>で定義されています。また，dc_mcf_evtheaderは，<dcmcf.h>で定義されているので，<dcmudpu.h>の前に<dcmcf.h>を取り込んでおいてください。

＜この項の構成＞

(1)　MCFイベントの共通ヘッダ

(2)　ERREVT1

(3)　ERREVT2

(4)　ERREVT3

(5)　ERREVTA

(6)　CERREVT

(7)　COPNEVT，CCLSEVT

(1)　MCFイベントの共通ヘッダ

(a)　形式

struct dc_mcf_evtheader {
 char mcfevt_name[9] ;        … MCFイベントコード
 char le_name[16] ;           … 論理端末名称
 char cn_name[9] ;            … MCF使用領域
 unsigned char format_kind;   … MCF使用領域
 char reserve01 ;             … 予備
 DCLONG time ;                … メッセージ入力時刻
};

(b)　MCFイベントとして設定される項目

le_name
ERREVT1，ERREVT2，またはERREVT3では，メッセージを入力した論理端末名称が設定されます。
ERREVT2およびERREVT3で，次に示す場合には，'*'が設定されます。

SPPがアプリケーション起動をしたMHPで，障害が発生した場合

上記の障害発生時にMCFイベントとして起動されたMHPによって，さらにアプリケーション起動をされたMHPで，障害が発生した場合

ERREVTAでは，メッセージを出力する論理端末名称が設定されます。
CERREVTでは，障害が発生した論理端末名称が設定されます。
COPNEVT，CCLSEVTでは，閉塞解除または閉塞した論理端末名称が設定されます。

time
メッセージを入力した時刻が，1970年1月1日0時0分0秒からの通算の秒数で設定されます。

(2)　ERREVT1

(a)　形式

struct dc_mcf_evt1_type {
 struct dc_mcf_evtheader  evtheader ;
                              … MCFイベント共通ヘッダ
 char reserve01[12] ;         … 予備
 char reserve02[10] ;         … 予備
 char reserve03[2] ;          … 予備
 char ap_name[10] ;           … アプリケーション名
                                 (メッセージに対応する
                                  アプリケーション名)
 char reserve04[2] ;          … 予備
};

(b)　MCFイベントとして設定される項目

ap_name
次に示すどちらかが設定されます。

形式不正の場合：不正となったアプリケーション名

定義されていない場合：定義されていないアプリケーション名

アプリケーション名は，MHPから送信されたメッセージの場合に設定されます。MHP以外から送信された場合はヌル文字が設定されます。

(3)　ERREVT2

(a)　形式

struct dc_mcf_evt2_type {
 struct dc_mcf_evtheader  evtheader ;
                              … MCFイベント共通ヘッダ
 char reserve01[12] ;         … 予備
 char reserve02[10] ;         … 予備
 char reserve03[2] ;          … 予備
 char ap_name[10] ;           … アプリケーション名
                                 (メッセージに対応する
                                  アプリケーション名)
 short reason_code ;          … 理由コード
};

(b)　MCFイベントとして設定される項目

ap_name
エラーになったUAPのアプリケーション名が設定されます。
アプリケーション名は，MHPから送信されたメッセージの場合に設定されます。MHP以外から送信された場合はヌル文字が設定されます。

reason_code
ERREVT2の理由コードが設定されます。理由コードの詳細については，「付録C　理由コード一覧」を参照してください。

(4)　ERREVT3

(a)　形式

struct dc_mcf_evt3_type {
 struct dc_mcf_evtheader  evtheader ;
                              … MCFイベント共通ヘッダ
 char reserve01[12] ;         … 予備
 char map_name[10] ;          … MCF使用領域
 char reserve03[2] ;          … 予備
 char ap_name[10] ;           … アプリケーション名
                                 (異常が発生したメッセー
                                  ジのアプリケーション名)
 char reserve04[2] ;          … 予備
 char service_name[32] ;      … サービス名
 char serv_grp_name[32] ;     … サービスグループ名
 char bid[36] ;               … トランザクションブランチ
                                 ID領域
} ;

(b)　MCFイベントとして設定される項目

ap_name
異常が発生したMHPのアプリケーション名が設定されます。
アプリケーション名は，MHPから送信されたメッセージの場合に設定されます。MHP以外から送信された場合はヌル文字が設定されます。

service_name
異常が発生したMHPのアプリケーション名に対応するサービス名が設定されます。

serv_grp_name
異常が発生したMHPのサービスが属するサービスグループ名が設定されます。

bid
トランザクションブランチIDが設定されます。

(5)　ERREVTA

(a)　形式

struct dc_mcf_evta_type {
 struct dc_mcf_evtheader  evtheader ;
                              … MCFイベント共通ヘッダ
 char   reserve01[12] ;       … 予備
 char   reserve02[10] ;       … 予備
 char   reserve03[2] ;        … 予備
 char   ap_name[10] ;         … アプリケーション名
                                （正常終了したメッセージの
                                  アプリケーション名）
 char   reserve04[2] ;        … 予備
 char   reserve05[32] ;       … 予備
 char   reserve06[32] ;       … 予備
 DCLONG user_leng ;           … 他プロトコルの場合の使用領域
 char   user_data[16] ;       … 他プロトコルの場合の使用領域
 char   reserve07[16] ;       … 予備
};

(b)　MCFイベントとして設定される項目

ap_name
正常終了したメッセージのアプリケーション名が設定されます。
アプリケーション名は，MHPから送信されたメッセージの場合に設定されます。ただし，MHP以外から送信された場合はヌル文字が設定されます。

(6)　CERREVT

(a)　形式

typedef struct {
   struct dc_mcf_evtheader  header ;
                              … MCFイベント共通ヘッダ
   DCLONG err_fact ;          … 障害要因コード(4バイト)
   DCLONG err_reason1 ;       … 理由コード1(4バイト)
   DCLONG err_reason2 ;       … 理由コード2(4バイト)
   char   reserve1[48];       … 予備
} dcmudp_cerrevt ;

(b)　MCFイベントとして設定される項目

err_fact
CERREVTの障害要因コードが，次に示す値で設定されます。

(00000031)₁₆

論理端末障害発生

err_reason1，err_reason2
CERREVTの理由コード1，理由コード2が設定されます。「付録C　理由コード一覧」を参照してください。

(7)　COPNEVT，CCLSEVT

(a)　形式

typedef struct {
 struct dc_mcf_evtheader  header ;
                              … MCFイベント共通ヘッダ
 char  reserve1[60];          … 予備
} dcmudp_statevt ;

(b)　MCFイベントとして設定される項目

ありません。

4.2.4　MCFイベント情報の形式（COBOL言語）

COBOL言語の場合はセグメントの並びとして渡されます。

COBOL言語のUAPの場合，MCFイベント情報の内容を表4-2～表4-7に示します。

表4-2　COBOL言語のMCFイベント情報の内容（ERREVT1）

項目
位置(バイト)
長さ
(バイト)
属性
内容

形式1
形式2

予備（形式1のときだけ）
0
－
2
－
－

予備（形式1のときだけ）
2
－
2
－
－

エラーイベントコード
4
0
3
英数字
'ERR'が設定されます。

7
3
3
－
－

10
6
2
英数字
ERREVT1を示す'1△'が設定されます。

入力元論理端末名称
12
8
8
英数字
メッセージを入力した論理端末名称です。

予備
20
16
20
－
－

アプリケーション名
40
36
8
英数字
次に示すどちらかが設定されます。

形式不正となったアプリケーション名

定義されていないアプリケーション名

予備
48
44
8
－
－

予備
56
52
8
－
－

予備
64
60
8
－
－

コネクション名
72
68
8
－
MCFが使用します。

予備
80
76
16
－
－

メッセージが入力された日付
96
92
8
外部10進
端末入力メッセージを入力した日付です。YYYYMMDDの形式です。
YYYY：西暦の年
MM：月
DD：日

メッセージが入力された時刻
104
100
8
外部10進
端末入力メッセージを入力した時刻です。HHMMSS00の形式です。
HH：時
MM：分
SS：秒
00は固定です。

予備
112
108
16
－
－

（凡例）

－：該当しません。または，使用されません。

表4-3　COBOL言語のMCFイベント情報の内容（ERREVT2）

項目
位置(バイト)
長さ
(バイト)
属性
内容

形式1
形式2

予備（形式1のときだけ）
0
－
2
－
－

予備（形式1のときだけ）
2
－
2
－
－

エラーイベントコード
4
0
3
英数字
'ERR'が設定されます。

7
3
3
－
－

10
6
2
英数字
ERREVT2を示す'2△'が設定されます。

入力元論理端末名称
12
8
8
英数字
メッセージを入力した論理端末名称です。
次に示す場合には，'*'が設定されます。

SPPがアプリケーション起動をしたMHPで障害が発生した場合

上記の障害発生時にMCFイベントとして起動されたMHPによって，さらにアプリケーション起動されたMHPで，障害が発生した場合

予備
20
16
20
－
－

アプリケーション名
40
36
8
英数字
エラーになったUAPのアプリケーション名です。

予備
48
44
8
－
－

予備
56
52
8
－
－

予備
64
60
8
－
－

コネクション名
72
68
8
－
MCFが使用します。

予備
80
76
16
－
－

メッセージが入力された日付
96
92
8
外部10進
端末入力メッセージを入力した日付です。YYYYMMDDの形式です。
YYYY：西暦の年
MM：月
DD：日

メッセージが入力された時刻
104
100
8
外部10進
端末入力メッセージを入力した時刻です。HHMMSS00の形式です。
HH：時
MM：分
SS：秒
00は固定です。

理由コード※
112
108
4
外部10進
理由コードが設定されます。

予備
116
112
12
－
－

（凡例）

－：該当しません。または，使用されません。

注※

理由コードの内容については，「付録C　理由コード一覧」を参照してください。

表4-4　COBOL言語のMCFイベント情報の内容（ERREVT3）

項目
位置(バイト）
長さ
(バイト)
属性
内容

形式1
形式2

予備（形式1のときだけ）
0
－
2
－
－

予備（形式1のときだけ）
2
－
2
－
－

エラーイベントコード
4
0
3
英数字
'ERR'が設定されます。

7
3
3
－
－

10
6
2
英数字
ERREVT3を示す'3△'が設定されます。

入力元論理端末名称
12
8
8
英数字
メッセージを入力した論理端末名称です。
次に示す場合は，'*'が設定されます。

SPPがアプリケーション起動をしたMHPで，障害が発生した場合

上記の障害発生時にMCFイベントとして起動されたMHPが，さらにアプリケーション起動をしたMHPで，障害が発生した場合

予備
20
16
20
－
－

予備
40
36
8
－
－

マップ名
48
44
8
－
MCFが使用します。

アプリケーション名
56
52
8
英数字
異常が発生したメッセージのアプリケーション名です。

予備
64
60
8
－
－

コネクション名
72
68
8
－
MCFが使用します。

予備
80
76
16
－
－

メッセージが入力された日付
96
92
8
外部10進
端末入力メッセージを入力した日付です。YYYYMMDDの形式です。
YYYY：西暦の年
MM：月
DD：日

メッセージが入力された時刻
104
100
8
外部10進
端末入力メッセージを入力した時刻です。HHMMSS00の形式です。
HH：時
MM：分
SS：秒
00は固定です。

予備
112
108
16
－
－

サービス名
128
124
31
英数字
異常が発生したUAPのアプリケーション名に対応するサービス名です。

予備
159
155
1
－
－

サービスグループ名
160
156
31
英数字
異常が発生したUAPのサービスグループ名です。

予備
191
187
1
－
－

トランザクションID（BID）
192
188
36
2進
異常が発生したトランザクションのBIDです。

予備
228
224
28
－
－

（凡例）

－：該当しません。または，使用されません。

表4-5　COBOL言語のMCFイベント情報の内容（ERREVTA）

項目
位置(バイト)
長さ
(バイト)
属性
内容

形式1
形式2

予備（形式1のときだけ）
0
－
2
－
－

予備（形式1のときだけ）
2
－
2
－
－

エラーイベントコード
4
0
3
英数字
'ERR'が設定されます。

7
3
3
－
－

10
6
2
英数字
ERREVTAを示す'A△'が設定されます。

出力先論理端末名称
12
8
8
英数字
メッセージを出力する論理端末名称です。

予備
20
16
20
－
－

予備
40
36
8
－
－

マップ名
48
44
8
英数字
MCFが使用します。

アプリケーション名
56
52
8
英数字
正常終了したメッセージのアプリケーション名です。MHPから送信されたメッセージの場合設定されます。MHP以外から送信された場合は空白が設定されます。

予備
64
60
8
－
－

コネクション名
72
68
8
－
MCFが使用します。

予備
80
76
16
－
－

メッセージが入力された日付
96
92
8
外部10進
端末入力メッセージを入力した日付です。
YYYYMMDDの形式です。
YYYY：西暦の年
MM：月
DD：日

メッセージが入力された時刻
104
100
8
外部10進
端末入力メッセージを入力した時刻です。
HHMMSS00の形式です。
HH：時
MM：分
SS：秒
00は固定です。

予備
112
108
16
－
－

予備
128
124
31
－
－

予備
159
155
1
－
－

予備
160
156
31
－
－

予備
191
187
1
－
－

予備
192
188
36
－
－

予備
228
224
28
－
－

（凡例）

－：該当しません。または，使用されません。

表4-6　COBOL言語のMCFイベント情報の内容（CERREVT）

項目
位置
(バイト)
長さ
(バイト)
属性
内容

イベントコード
0
8
英数字
イベントコード「CERREVT」が設定されます。

入力元論理端末名称
8
8
英数字
障害の発生した論理端末名称が設定されます

予備
16
16
－
－

メッセージが入力された日付
32
8
外部10進
CERREVTを通知した日付です。YYYYMMDDの形式です。
YYYY：西暦の年
MM：月
DD：日

メッセージが入力された時刻
40
8
外部10進
CERREVTを通知した時刻です。HHMMSS00の形式です。
HH：時
MM：分
SS：秒
00は固定です。

障害要因コード
48
4
2進
障害要因コードが設定されます。
(00000031)₁₆：論理端末障害

理由コード1※
52
4
2進
理由コード1が設定されます。

理由コード2※
56
4
2進
理由コード2が設定されます。

予備
60
48
－
－

（凡例）

－：該当しません。または，使用されません。

注※

理由コード1，および理由コード2については，「付録C　理由コード一覧」を参照してください

表4-7　COBOL言語のMCFイベント情報の内容（COPNEVT，CCLSEVT）

項目
位置
(バイト)
長さ
(バイト)
属性
内容

イベントコード
0
8
英数字
イベントコード「COPNEVT」，または「CCLSEVT」が設定されます。

入力元論理端末名称
8
8
英数字
入力元論理端末名称が設定されます。

予備
16
16
－
－

メッセージが入力された日付
32
8
外部10進
COPNEVT，CCLSEVTを通知した日付です。YYYYMMDDの形式です。
YYYY：西暦の年
MM：月
DD：日

メッセージが入力された時刻
40
8
外部10進
COPNEVT，CCLSEVTを通知した時刻です。HHMMSS00の形式です。
HH：時
MM：分
SS：秒
00は固定です。

予備
48
60
－
－

（凡例）

－：該当しません。または，使用されません。

5.　システム定義

この章では，UDPプロトコルを使用するために必要な，OpenTP1のシステム定義の中でのTP1/NET/UDP固有のシステム定義，およびシステム定義例について説明します。

＜この章の構成＞

TP1/NET/UDPの定義の概要

TP1/NET/UDP固有のシステム定義の種類

mcftalcle（論理端末定義の開始）

mcftalced（論理端末定義の終了）

システムサービス情報定義

システムサービス共通情報定義

MCF定義オブジェクトの生成

定義例

TP1/NET/UDPの定義の概要

TP1/NET/UDPのシステム定義は，OpenTP1のネットワークコミュニケーション定義の中で定義します。

OpenTP1のネットワークコミュニケーション定義の中での定義

OpenTP1のネットワークコミュニケーション定義のうち，TP1/NET/UDPに固有の定義について説明します。

使用する定義ファイル

MCFおよびTP1/NET/UDPを起動するには，定義ファイルに環境情報を設定する必要があります。MCFで使用する定義ファイルを次の表に示します。

表5-1　MCFで使用する定義ファイル

定義の種類 | 定義のソースファイル | 定義の内容
MCFマネジャ定義 | MCFマネジャ定義ソースファイル | MCF全体の実行環境
MCF通信構成定義 | 共通定義ソースファイル | プロトコルごとの実行環境
プロトコル固有定義ソースファイル
MCFアプリケーション定義 | MCFアプリケーション定義ソースファイル | アプリケーションの属性

定義のソースファイルは，定義コマンド，オプション，およびオペランドを指定して作成します。それらの中には，プロトコルで共通のものと，プロトコルに固有のものがあります。表5-1の定義の中で，TP1/NET/UDPに固有の定義があるものは，「MCF通信構成定義」だけです。

この章では，TP1/NET/UDPに固有の定義コマンド，オプション，およびオペランドについて説明します。

プロトコルで共通の定義については，マニュアル「OpenTP1 システム定義」を参照してください。ただし，mcftbuf（バッファグループ定義）のlength，countオペランドの指定値については，「mcftalcle（論理端末定義の開始）」の注意事項に記載してあります。

TP1/NET/UDPの組み込み時に必要なファイル

次に示すファイルは，TP1/NET/UDPをOpenTP1システムに組み込むときに必要なファイルです。

システムサービス情報定義ファイル

システムサービス共通情報定義ファイル

MCF定義オブジェクトファイル

この章では，システムサービス情報定義ファイルとシステムサービス共通情報定義ファイルの記述内容，およびMCF定義オブジェクトファイルを生成するユティリティの起動コマンドについて説明します。TP1/NET/UDPを組み込む方法については，「7.　組み込み方法」を参照してください。

TP1/NET/UDP固有のシステム定義の種類

OpenTP1のネットワークコミュニケーション定義のうち，TP1/NET/UDPに固有の定義の一覧を次の表に示します。

表5-2　TP1/NET/UDP固有の定義の一覧

定義名 | コマンド | オプション・オペランド | 定義内容 | 指定値((値範囲))《省略時解釈値》
MCF通信構成定義 | 共通定義 | プロトコル共通のコマンドだけで指定できます。共通のコマンドについては，マニュアル「OpenTP1 システム定義」を参照してください。
プロトコル固有定義 | mcftalcle （論理端末定義の開始） 指定数:1～512 | -l | － | 論理端末名称 | 1～8文字の識別子
-p | － | プロトコルの種別 | udp
-t | － | 論理端末タイプ | any
-i | － | システム開始時および再開始時の論理端末起動方法の指定 | auto｜《manual》
-v | － | アプリケーション名 | 1～8文字の識別子
-g | sndbuf | メッセージ送信用バッファグループ番号 | 符号なし整数((1～512))
rcvbuf | メッセージ受信用バッファグループ番号 | 符号なし整数((1～512))
-e | msgbuf | メッセージ編集用バッファグループ番号 | 符号なし整数((1～512))
count | メッセージ編集用バッファ数 | 符号なし整数((1～131070))
-s | syssndsize | システムのメッセージ送信バッファ長 | 符号なし整数（単位：バイト）((1～2147483647))
sysrcvsize | システムのメッセージ受信バッファ長 | 符号なし整数（単位：バイト）((1～2147483647))
-r | ipaddr | 自システムのIPアドレス | 符号なし整数((0～255))（nnn.nnn.nnn.nnn）
hostname | 自システムのホスト名 | 1～255文字のホスト名
portno | 自システムのポート番号 | 符号なし整数((1～65535))
reuse | 同一ポート共用の可否 | yes｜《no》
-m | multicast | マルチキャスト通信機能の使用有無 | yes｜《no》
hostgroupname | 参加するホストグループのホスト名 | 1～255文字のホスト名
hostgroupaddr | 参加するホストグループのIPアドレス | 符号なし整数((0～255))（nnn.nnn.nnn.nnn）
ripaddr | 自システムのIPアドレス | 符号なし整数((0～255))（nnn.nnn.nnn.nnn）
rhostname | 自システムのホスト名 | 1～255文字のホスト名
multicastttl | マルチキャストパケットの生存期間（TTL） | 符号なし整数((0～255))
mmsgcnt | メモリ内の出力メッセージの最大格納数 | 符号なし整数((0～65535))《0》
dmsgcnt | ディスク内の出力メッセージの最大格納数 | 符号なし整数((0～65535))《0》
-k | quekind | 出力キューの媒体の種類 | 《memory》｜disk
quegrpid | キューグループID | 1～8文字の識別子
-o | aj | 送信完了情報取得要否 | 《yes》｜no
mcftalced （論理端末定義の終了） 指定数:mcftalcleと同数 | － | － | 論理端末定義の終了 | －

（凡例）

－：該当しません。

注※

TP1/NET/UDPに固有の定義だけ記載してあります。このほかにも，プロトコルで共通の定義コマンド，オプション，オペランドがあります。それらについては，マニュアル「OpenTP1 システム定義」を参照してください。

mcftalcleコマンドの指定条件

mcftalcleコマンドのオプションおよびオペランドの指定条件を次の表に示します。

表5-3　mcftalcleコマンドのオプションおよびオペランドの指定条件

オプションおよびオペランド | 送信するメッセージの種別 | 受信するメッセージの種別
ユニキャスト | ブロードキャスト | マルチキャスト | ユニキャスト | ブロードキャスト | マルチキャスト
-l | 論理端末名称 | ◎ | ◎ | ◎ | ◎ | ◎ | ◎
-p | udp | ◎ | ◎ | ◎ | ◎ | ◎ | ◎
-t | any | ◎ | ◎ | ◎ | ◎ | ◎ | ◎
-i | auto｜manual | ○ | ○ | ○ | ○ | ○ | ○
-v | アプリケーション名 | － | － | － | ○ | ○ | ○
-g | sndbuf | ◎ | ◎ | ◎ | ◎※1 | ◎※1 | ◎※1
rcvbuf | ◎※1 | ◎※1 | ◎※1 | ◎ | ◎ | ◎
-e | msgbuf | ○ | ○ | ○ | ○ | ○ | ○
count | ○ | ○ | ○ | ○ | ○ | ○
-s | syssndsize | ○ | ○ | ○ | － | － | －
sysrcvsize | － | － | － | ○ | ○ | ○
-r | ipaddr | ○※2 | ○※2 | ○※2 | × | × | ×
hostname
portno | ◎ | ◎ | ◎ | ◎ | ◎ | ◎
reuse | － | － | － | － | ○ | ○
-m | multicast | － | － | ◎ | － | － | ◎
hostgroupname | － | － | － | － | － | ◎※2
hostgroupaddr | － | － | － | － | －
ripaddr | － | － | － | － | － | ○※2
rhostname | － | － | － | － | －
multicastttl | － | － | ○ | － | － | －
mmsgcnt | ○ | ○ | ○ | － | － | －
dmsgcnt | ○ | ○ | ○ | － | － | －
-k | quekind | ○ | ○ | ○ | － | － | －
quegrpid | ○ | ○ | ○ | － | － | －
-o | aj | ○ | ○ | ○ | － | － | －

（凡例）

◎：必ず指定する項目

○：指定できる項目

×：指定してはいけない項目

－：指定しても無効になる項目

注※1

必ず指定します。ただし，TP1/NET/UDPは指定内容を使用しません。

注※2

どちらか一方だけを指定してください。

定義の指定順序

TP1/NET/UDPのプロトコル固有定義コマンドの指定順序を次の図に示します。MCF通信構成定義コマンドを指定するときは，必ずこの順序に従ってください。

図5-1　TP1/NET/UDPのプロトコル固有定義コマンドの指定順序

mcftalcle（論理端末定義の開始）

形式

mcftalcle  -l  論理端末名称
          -p  udp
          -t  any
        〔-i  auto|manual〕
        〔-v  アプリケーション名〕
          -g  "sndbuf=メッセージ送信用バッファグループ番号
               rcvbuf＝メッセージ受信用バッファグループ番号"
        〔-e  "〔msgbuf＝メッセージ編集用バッファグループ番号〕
               〔count＝メッセージ編集用バッファ数〕"〕
        〔-s  "〔syssndsize＝システムのメッセージ送信バッファ長〕
               〔sysrcvsize＝システムのメッセージ受信バッファ長〕"〕
          -r  "〔ipaddr＝自システムのIPアドレス〕
               〔hostname＝自システムのホスト名〕
                 portno＝自システムのポート番号
               〔reuse＝yes|no〕"
        〔-m  "〔multicast＝yes|no〕
               〔hostgroupname＝参加するホストグループのホスト名〕
               〔hostgroupaddr＝参加するホストグループのIPアドレス〕
               〔ripaddr＝自システムのIPアドレス〕
               〔rhostname＝自システムのホスト名〕"〕
               〔multicastttl＝送信するマルチキャストパケットの生存期間（TTL）"〕
               〔mmsgcnt＝メモリ出力メッセージ最大格納数〕
               〔dmsgcnt＝ディスク出力メッセージ最大格納数〕"〕
        〔-k  "〔quekind＝memory｜disk〕
               〔quegrpid＝キューグループID〕"〕
        〔-o  "〔aj＝yes|no〕"〕

機能

論理端末に関する環境を定義します。

オプション

●-l 論理端末名称　　～＜1～8文字の識別子＞

OpenTP1システム内で，一意となる論理端末名称を指定します。

●-p udp

プロトコルの種別を指定します。

udp

UDPプロトコル（TP1/NET/UDP）

●-t any

この論理端末の端末タイプを指定します。

any

任意型論理端末

●-i auto｜manual　　～《manual》

OpenTP1システム開始時および再開始時に論理端末を自動的に閉塞解除するかどうかを指定します。

auto

OpenTP1システム開始時および再開始時に論理端末を自動的に閉塞解除します。

manual

MCF起動後，運用コマンド（mcftactle）を入力して閉塞解除します。

●-v アプリケーション名　　～＜1～8文字の識別子＞

入力メッセージを受信した場合に起動するアプリケーション名称（MHP）を指定します。MCFアプリケーション属性定義（mcfaalcap -nオプションのnameオペランド）で定義した名称を指定してください。MCFアプリケーション属性定義の詳細については，マニュアル「OpenTP1 システム定義」を参照してください。

このオプションを省略した場合，入力メッセージ編集UOCで指定した値，またはメッセージの先頭から空白の手前までの8バイト以内の値がアプリケーション名として仮定されます。アプリケーション名決定の優先順位については，「2.2.5　アプリケーション名の決定」を参照してください。

●-g

（オペランド）

sndbuf＝メッセージ送信用バッファグループ番号　　～＜符号なし整数＞((1～512))

メッセージ送信用のバッファグループ番号を指定します。

mcftbufコマンドの-gオプションgroupnoオペランドに指定したバッファグループ番号を指定してください。

rcvbuf＝メッセージ受信用バッファグループ番号　　～＜符号なし整数＞((1～512))

メッセージ受信用のバッファグループ番号を指定します。

mcftbufコマンドの-gオプションgroupnoオペランドに指定したバッファグループ番号を指定してください。

●-e

（オペランド）

msgbuf＝メッセージ編集用バッファグループ番号　　～＜符号なし整数＞((1～512))

入力，および出力メッセージ編集UOCで，メッセージ編集用として使用するバッファグループ番号を指定します。このオペランドを省略した場合，メッセージ編集用バッファは確保されません。

mcftbufコマンドの-gオプションのgroupnoオペランドに指定したバッファグループ番号を指定してください。

count＝メッセージ編集用バッファ数　　～＜符号なし整数＞((1～131070))

入力，および出力メッセージ編集UOCで，メッセージ編集用として使用するバッファの数を指定します。

メッセージ編集用バッファグループ番号（msgbufオペランドで指定）に対応するmcftbufコマンドで指定するバッファ数（-gオプションのcountオペランドおよびextendオペランド）の中から，メッセージ編集用に使用するバッファ数を指定してください。2以上の値を指定しても，入力，および出力メッセージ編集UOCで使用できる編集バッファ数は一つだけです。

また，このcountオペランドで指定するメッセージ編集用バッファ数は，mcftbufコマンドで指定するバッファ数（-gオプションのcountオペランドおよびextendオペランド）の合計値を超える指定はできません。

msgbufオペランドを省略した場合，このオペランドの指定は無効です。

●-s

（オペランド）

syssndsize＝システムのメッセージ送信バッファ長　　～＜符号なし整数＞((1～2147483647))

OSが提供するソケットオプション「SO_SNDBUF」（システムのメッセージ送信バッファ長）を指定します。

sysrcvsize＝システムのメッセージ受信バッファ長　　～＜符号なし整数＞((1～2147483647))

OSが提供するソケットオプション「SO_RCVBUF」（システムのメッセージ受信バッファ長）を指定します。

syssndsizeオペランドおよびsysrcvsizeオペランドで指定できるバッファ長の範囲はOSに依存します。指定を省略すると，OSのデフォルト値が仮定されます。詳しくは，ご使用のOSのマニュアルで，UDPプロトコルについて説明している個所を参照してください。

なお，syssndsizeオペランドおよびsysrcvsizeオペランドの指定値を決定する際には，「2.1.4　AP間通信の注意事項」のメッセージ長に関する項目を参照してください。

●-r

（オペランド）

ipaddr＝自システムのIPアドレス　　～（nnn.nnn.nnn.nnn）＜符号なし整数＞((0～255))

自システムがホットスタンバイ構成である場合，または複数のLANアダプタを持つ場合に，メッセージの送信に使用するLANアダプタのIPアドレスを指定します。

ipaddrオペランドまたはhostnameオペランドのどちらか一方を指定してください。両方を指定した場合は，定義オブジェクトの生成時にエラーとなります。どちらも省略した場合は，OSが使用するLANアダプタが仮定されます。

メッセージ受信に使用する論理端末の場合，ipaddrオペランドを指定してはいけません。

hostname＝自システムのホスト名　　～＜1～255文字のホスト名＞

自システムがホットスタンバイ構成である場合，または複数のLANアダプタを持つ場合に，メッセージの送信に使用するLANアダプタのホスト名を指定します。

hostnameオペランドまたはipaddrオペランドのどちらか一方を指定してください。両方を指定した場合は，定義オブジェクトの生成時にエラーとなります。どちらも省略した場合は，OSが使用するLANアダプタが仮定されます。

メッセージ受信に使用する論理端末の場合，hostnameオペランドを指定してはいけません。

portno＝自システムのポート番号　　～＜符号なし整数＞((1～65535))

メッセージ送受信に使用する，自システムのポート番号を指定します。

portnoオペランドで指定するポート番号は，重複を避けるため次のポート番号とは異なる値を指定してください。

ほかのmcftalcleコマンドの-rオプションで指定するポート番号

OSが任意に割り当てるポート番号（動的ポートまたは短命ポートと呼ばれるポート番号）
OSが任意に割り当てる番号は，OSの種別やバージョンによって異なります。詳細については，ご使用のOSのマニュアルを参照してください。

reuse＝yes｜no　　～《no》

OSが提供するソケットオプション「SO_REUSEPORT」または「SO_REUSEADDR」を使用して，複数のMCF通信プロセスで同一のポート番号を共用するかどうかを指定します。

yes

複数のMCF通信プロセスでポート番号を共用します。

no

複数のMCF通信プロセスでポート番号を共用しません。

●-m

（オペランド）

multicast＝yes｜no　　～《no》

マルチキャストを使用したメッセージの送受信の有無を指定します。

yes

マルチキャストを使用したメッセージの送受信を行います。

no

マルチキャストを使用したメッセージの送受信を行いません。

hostgroupname＝参加するホストグループのホスト名　　～＜1～255文字のホスト名＞

マルチキャストメッセージを受信する場合，参加するホストグループのホスト名を指定します。

hostgroupnameオペランドまたはhostgroupaddrオペランドのどちらか一方を必ず指定してください。両方を指定した場合は，定義オブジェクトの生成時にエラーとなります。

また，multicastオペランドにnoを指定した場合にhostgroupnameオペランドを指定すると，定義オブジェクトの生成時にエラーとなります。

hostgroupaddr＝参加するホストグループのIPアドレス　　～（nnn.nnn.nnn.nnn）＜符号なし整数＞((0～255))

マルチキャストメッセージを受信する場合，参加するホストグループのIPアドレスを指定します。

hostgroupaddrオペランドまたはhostgroupnameオペランドのどちらか一方を必ず指定してください。両方を指定した場合は，定義オブジェクトの生成時にエラーとなります。

また，multicastオペランドにnoを指定した場合にhostgroupnameオペランドを指定すると，定義オブジェクトの生成時にエラーとなります。

ripaddr＝自システムのIPアドレス　　～（nnn.nnn.nnn.nnn）＜符号なし整数＞((0～255))

自システムがホットスタンバイ構成である場合，または複数のLANアダプタを持つ場合に，マルチキャストメッセージの受信に使用するLANアダプタのIPアドレスを指定します。

ripaddrオペランドまたはrhostnameオペランドのどちらか一方を指定してください。両方を指定した場合は，定義オブジェクトの生成時にエラーとなります。どちらも省略した場合は，OSが使用するLANアダプタが仮定されます。

また，multicastオペランドにnoを指定した場合にripaddrオペランドを指定すると，定義オブジェクトの生成時にエラーとなります。

rhostname＝自システムのホスト名　　～＜1～255文字のホスト名＞

自システムがホットスタンバイ構成である場合，または複数のLANアダプタを持つ場合に，マルチキャストメッセージの受信に使用するLANアダプタのホスト名を指定します。

rhostnameオペランドまたはripaddrオペランドのどちらか一方を指定してください。両方を指定した場合は，定義オブジェクトの生成時にエラーとなります。どちらも省略した場合は，OSが使用するLANアダプタが仮定されます。

また，multicastオペランドにnoを指定した場合にrhostnameオペランドを指定すると，定義オブジェクトの生成時にエラーとなります。

multicastttl＝送信するマルチキャストパケットの生存期間（TTL）　　～＜符号なし整数＞((0～255))

OSが提供するソケットオプション「IP_MULTICAST_TTL」を使用して，マルチキャストメッセージ送信時のマルチキャストパケットの生存期間（TTL）を指定します。このオペランドを省略した場合，TTLはOSが設定します。TTLのデフォルト値については，ご使用のOSのマニュアルを参照してください。

multicastオペランドにnoを指定した場合にmulticastttlオペランドを指定すると，定義オブジェクトの生成時にエラーとなります。

mmsgcnt＝メモリ出力メッセージ最大格納数　　～＜符号なし整数＞((0～65535))《0》

メモリキューで待ち合わせる出力メッセージの最大格納数を指定します。

出力メッセージの待ち合わせ数が指定した最大数になると，それ以後UAPからの一方送信メッセージの送信要求（dc_mcf_send関数またはSEND文）はエラーリターン（リターン値DCMCFRTN_71003またはステータスコード71003）となります。

0を指定した場合，メモリキューで待ち合わせる出力メッセージの数は無制限になります。ただし，実際に待ち合わせできる出力メッセージ数は動的共用メモリの容量に依存します。

dmsgcnt＝ディスク出力メッセージ最大格納数　　～＜符号なし整数＞((0～65535))《0》

ディスクキューで待ち合わせる出力メッセージの最大格納数を指定します。

出力メッセージの待ち合わせ数が指定した最大数になると，それ以後UAPからの一方送信メッセージの送信要求（dc_mcf_send関数またはSEND文）はエラーリターン（リターン値DCMCFRTN_71003またはステータスコード71003）となります。

0を指定した場合，ディスクキューで待ち合わせする出力メッセージの数は無制限になります。ただし，実際に待ち合わせできる出力メッセージ数はメッセージキューファイルの容量に依存します。

●-k

（オペランド）

quekind＝memory｜disk　　～《memory》

出力メッセージの割り当て先（メモリキューまたはディスクキュー）を指定します。

memory

メモリキューだけに割り当てます。

disk

ディスクキューおよびメモリキューに割り当てます。

diskを指定した場合，必ずquegrpidオペランドを指定してください。

quegrpid＝キューグループID　　～＜1～8文字の識別子＞

ディスクキューで待ち合わせする出力メッセージに使用するキューグループIDを指定します。

MCFマネジャ定義のmcfmqgidコマンドで指定するキューグループID（キュー種別はotq）のどれかを指定してください。

このオペランドは，quekindオペランドでdiskを指定した場合だけ指定します。

●-o

（オペランド）

aj＝yes｜no　　～《yes》

メッセージ送信が完了した場合に，メッセージ送信完了ジャーナル（AJ）を取得するかどうかを指定します。ただし，sendsync関数で送信したメッセージは，このオペランドの指定内容に関係なく，メッセージ送信完了ジャーナルを取得しません。

yes

メッセージ送信完了ジャーナルを取得します。

no

メッセージ送信完了ジャーナルを取得しません。

注意事項

-gオプション，および-eオプションで指定するバッファグループ番号は，バッファグループ定義のmcftbufコマンドに対応しています。mcftbufコマンドでは，1論理端末単位に次の表に示す資源が必要です。バッファグループ定義については，マニュアル「OpenTP1 システム定義」を参照してください。

バッファ種別 | lengthオペランド | countオペランド
sndbuf | 最大送信長＋TP1/NET/UDP制御ヘッダ長（24バイト）以上 | 1以上
rcvbuf | 最大受信メッセージ長以上 | 相手システムから連続して送られてくるメッセージ数※
msgbuf | sndbufとrcvbufのどちらか大きい方の値 | sndbufと同じ

注※

受信バッファの面積は，システムのトラフィック量に応じて，受信バッファ不足が発生しないよう見積もってください。

mcftalced（論理端末定義の終了）

形式

mcftalced

機能

論理端末定義の終了を示します。

オプション

ありません。

システムサービス情報定義

MCFサービスはユーザが作るシステムサービスで，OpenTP1のシステムサービスと同じ位置づけになります。

システムサービス情報定義では，MCF通信サービスを起動するための環境を定義します。ユーザがMCFサービスを作成するときに定義する必要があります。

システムサービス情報定義は，テキストエディタを使用して作成します。

システムサービス情報定義の完全パス名を次に示します。

$DCDIR/lib/sysconf/定義ファイル名

定義ファイル名には，システムサービス情報定義のmoduleオペランドで指定する実行形式プログラム名を指定します。この定義ファイル名をMCFマネジャ定義のmcfmcnameコマンドに指定します。

形式

 set module="TP1/NET/UDPの実行形式プログラム名"

機能

プロセスサービスがMCF通信サービスを起動するための環境を定義します。

各MCF通信サービスに対して一つ，システムサービス情報定義を作成できます。また，複数のMCF通信サービスで一つのシステムサービス情報定義を共用することもできます。

オペランド

●module="TP1/NET/UDPの実行形式プログラム名"　　～＜1～8文字の識別子＞

MCF通信サービスを起動するための実行形式プログラム名を指定します。

MCF実行形式プログラムには，MCF通信プロセスのためのものとアプリケーション起動プロセスのためのものがあります。

MCF実行形式プログラムは，MCF通信プロセス同士，アプリケーション起動プロセス同士で共有できます。

TP1/NET/UDPの実行形式プログラム名には，先頭4文字がmcfuで始まる最大8文字の名称を指定します。

システムサービス共通情報定義

TP1/NET/UDPで定義したシステム構成の内容によっては，OpenTP1のシステムサービス共通情報定義を指定する必要があります。

システムサービス共通情報定義の完全パス名を次に示します。

$DCDIR/lib/sysconf/mcf

形式

set形式

set max_socket_descriptors=ソケット用ファイル記述子の最大数
set max_open_fds=MCF通信プロセスでアクセスするファイルの最大数

機能

システムサービス共通情報定義では，複数のMCF通信サービスに共通する情報を定義します。この定義ファイルは，標準値を定義した状態で製品に含まれています。次に示すオペランドについては，必要に応じて，テキストエディタを使用して定義値を変更してください。ほかのオペランドについては，変更しないでください。

set形式のオペランド

●max_socket_descriptors=ソケット用ファイル記述子の最大数　　～〈符号なし整数〉((64～1024または64～2047))

各MCF通信プロセスでソケット用に使用するファイル記述子数の中の最大数を指定します。

指定値の範囲は，適用OSによって次のとおり異なります。

Linuxの場合：64～1024

AIXの場合：64～2047

ソケット用ファイル記述子の最大数を求める計算式を次に示します。↑↑は，小数点以下を切り上げることを意味します。

↑（このMCF通信プロセスに対してメッセージ送信要求を行うUAPプロセス数※1
 ＋システムサービスプロセス数※2
 ＋このMCF通信プロセスに対して同時に処理要求を行う運用コマンド数
 ）／0.8↑

注※1

アプリケーション起動サーバに対するアプリケーション起動要求を行うUAPプロセス数も含みます。

注※2

システムサービスプロセス数とは，自OpenTP1内のシステムサービスプロセス数です。

自OpenTP1内のMCF通信プロセスごとに計算し，その結果の中で最大値が64より大きい場合は，その値を指定します。64以下の場合は，64を指定します。

●max_open_fds=MCF通信プロセスでアクセスするファイルの最大数　　～〈符号なし整数〉((100～1024または100～2016))

各MCF通信プロセスでアクセスするファイル数の中の最大値を指定します。

指定値の範囲は，適用OSによって次のとおり異なります。

Linuxの場合：100～1024

AIXの場合：100～2016

ファイル記述子の最大数を求める計算式を次に示します。

（プロトコル制御で使用するファイル記述子数※¹）
＋MCFメイン関数でユーザが使用するファイル記述子数
＋30※²

注※1

TP1/NET/UDPの場合，MCF通信構成定義に定義した論理端末の総数になります。実際に通信を行う論理端末の総数ではありません。

注※2

MCF通信プロセスが扱う定義ファイルなどの数の最大値です。

自OpenTP1内のMCF通信プロセスごとに計算し，その結果の中で最大値が500より大きい場合は，その値を指定します。500以下の場合は，500を指定します。指定値を超えてファイルのアクセスが発生した場合，その超過分は，ソケット用ファイル記述子使用数として扱われます。この場合，max_socket_descriptorsオペランドの指定値からmax_open_fdsオペランドの指定値を減算した超過分が，実際のソケット用ファイル記述子の最大数になりますので，ご注意ください。

なお，このオペランドには，次の条件を満たす値を指定してください。

（「このオペランドの指定値」
＋同定義内の「max_socket_descriptorsオペランドの指定値」）≦「ファイル記述子の最大数※3」

注※3

ファイル記述子の最大数は，適用OSによって次のとおり異なります。

Linuxの場合：1024

AIXの場合：2048

適用OSがAIXの場合に条件を満たさない指定をしたときは，このオペランドの指定値は次に示すとおりに強制的に補正されます。

ファイル記述子の最大値
－（同定義内の「max_socket_descriptorsオペランドの指定値」）

適用OSがLinuxの場合に条件を満たさない指定をしたときは，MCFの開始を中断します。

注意事項

max_socket_descriptorsオペランドの指定値とmax_open_fdsオペランドの指定値の合計は，OSのシステムパラメタで指定する「1プロセスでオープンできるファイル数」を超えないようにする必要があります。システム定義の変更などによって，オペランドの指定値の合計が増加する場合は，OSのシステムパラメタの指定を変更してください。

MCF定義オブジェクトの生成

MCF定義オブジェクト生成ユティリティでは，MCFの定義ファイルの構文のチェックと定義オブジェクトファイルへの変換をします。ここでは，MCF定義オブジェクト生成ユティリティの起動コマンドについて説明します。

形式

mcfudp -i 〔パス名〕入力ファイル名
      -o 〔パス名〕出力オブジェクトファイル名

機能

MCF通信構成定義のTP1/NET/UDPのプロトコル固有定義ファイルの構文をチェックし，定義オブジェクトファイルを作成します。

ただし，開始から再開始の間に定義オブジェクトファイルを変更してはいけません。変更した場合，再開始時に正常に動作しないおそれがあるためご注意ください。

TP1/NET/UDPのプロトコル固有定義オブジェクトファイル以外の生成ユティリティについては，マニュアル「OpenTP1 システム定義」を参照してください。

オプション

●-i 〔パス名〕入力ファイル名　　～＜パス名＞＜1～8文字の識別子＞

定義ソースが格納されているファイル名を指定します。

●-o 〔パス名〕出力オブジェクトファイル名　　～＜パス名＞＜1～8文字の英数字＞

定義オブジェクトを格納するファイル名を指定します。

定義例

TP1/NET/UDPを使用したシステム構成例を次の図に示し，その構成に沿った定義例を示します。

図5-2　TP1/NET/UDPのシステム構成例

TP1/NET/UDPでは，このシステム構成例に対応する定義例を次のファイルで提供しています。

適用OSがLinuxの場合

/opt/OpenTP1/examples/mcf/UDPIP/conf/com_c1

/opt/OpenTP1/examples/mcf/UDPIP/conf/com_d1

その他のOSの場合

/BeTRAN/examples/mcf/UDPIP/conf/com_c1

/BeTRAN/examples/mcf/UDPIP/conf/com_d1

TP1/NET/UDPのシステム定義例

#################################################################
#                  MCF 通信構成定義 (共通定義)                  #
#  TP1/NET/User Datagram Protocol 対応 (提供ファイル名：com_c1) #
#################################################################
#-------------------------- mcftenv ----------------------------#
mcftenv    -s   01                   ¥
          -a   APLIUDP
#-------------------------- mcftcomn ---------------------------#
mcftcomn
#-------------------------- mcfttrc ----------------------------#
mcfttrc    -t  "disk = yes"          ¥
#-------------------------- mcftbuf ----------------------------#
mcftbuf    -g  "groupno = 1          ¥
               length  = 32768      ¥
               count   = 6"
mcftbuf    -g  "groupno = 2          ¥
               length  = 32768      ¥
               count   = 18"
#############################  End  #############################

#################################################################
#                  MCF 通信構成定義 (固有定義)                  #
#  TP1/NET/User Datagram Protocol 対応 (提供ファイル名：com_d1) #
#################################################################
######### LE definition(leid01)
mcftalcle  -l   leid01                 ¥
          -p   udp                    ¥
          -t   any                    ¥
          -g  "sndbuf     = 1         ¥
               rcvbuf     = 2"        ¥
          -s  "syssndsize = 32000     ¥
               sysrcvsize = 61680"    ¥
          -r  "portno = 20001"
mcftalced
######### LE definition(leid02)
mcftalcle  -l   leid02                 ¥
          -p   udp                    ¥
          -t   any                    ¥
          -g  "sndbuf    = 1          ¥
               rcvbuf    = 2"         ¥
          -s  "syssndsize = 32000     ¥
               sysrcvsize = 61680"    ¥
          -r  "portno = 20002"        ¥
          -m  "multicast = yes        ¥
               hostgroupaddr = 224.1.2.3"
mcftalced
######### LE definition(leid03)
mcftalcle  -l   leid03                 ¥
          -p   udp                    ¥
          -t   any                    ¥
          -g  "sndbuf    = 1          ¥
               rcvbuf    = 2"         ¥
          -s  "syssndsize = 32000     ¥
               sysrcvsize = 61680"    ¥
          -r  "portno = 20003"
mcftalced
######### LE definition(leid04)
mcftalcle  -l   leid04                 ¥
          -p   udp                    ¥
          -t   any                    ¥
          -g  "sndbuf    = 1          ¥
               rcvbuf    = 2"         ¥
          -s  "syssndsize = 32000     ¥
               sysrcvsize = 61680"    ¥
          -r  "portno = 20004"
mcftalced
######### LE definition(leid05)
mcftalcle  -l   leid05                 ¥
          -p   udp                    ¥
          -t   any                    ¥
          -g  "sndbuf     = 1         ¥
               rcvbuf     = 2"        ¥
          -s  "syssndsize = 32000     ¥
               sysrcvsize = 61680"    ¥
          -r  "portno = 20005"
mcftalced
######### LE definition(leid06)
mcftalcle  -l   leid06                 ¥
          -p   udp                    ¥
          -t   any                    ¥
          -g  "sndbuf    = 1          ¥
               rcvbuf    = 2"         ¥
          -s  "syssndsize = 32000     ¥
               sysrcvsize = 61680"    ¥
          -r  "portno = 20006"        ¥
          -m  "multicast = yes"
mcftalced

#############################  End  #############################

6.　運用コマンド

この章では，TP1/NET/UDPで使用する運用コマンドについて説明します。

＜この章の構成＞

TP1/NET/UDPの運用コマンド

mcftactle（論理端末の閉塞解除）

mcftdctle（論理端末の閉塞）

mcftlsle（論理端末の状態表示）

TP1/NET/UDPの運用コマンド

ここでは，TP1/NET/UDPに関係のあるオプションについてだけ説明しています。ほかのオプションおよびその他の運用コマンドについては，マニュアル「OpenTP1 運用と操作」を参照してください。

TP1/NET/UDPで使用する運用コマンドの一覧を，次の表に示します。

表6-1　TP1/NET/UDPで使用する運用コマンドの一覧

機能 | コマンド名称 | 定義中組み込み | オフライン中に実行 | オンライン中に実行 | UAPから実行
論理端末管理 | 論理端末の閉塞解除 | mcftactle | × | × | ○ | ○
論理端末の閉塞 | mcftdctle | × | × | ○ | ○
論理端末の状態表示 | mcftlsle | × | × | ○ | ○

（凡例）

○：組み込み，または実行ができます。

×：組み込み，または実行ができません。

mcftactle（論理端末の閉塞解除）

形式

mcftactle 〔-s MCF通信プロセス識別子〕 -l 論理端末名称

機能

論理端末の閉塞を解除します。

オプション

●-s MCF通信プロセス識別子　　～＜16進数字＞((01～ef))

MCF通信プロセス識別子を指定します。

MCF通信プロセス識別子は複数指定できません。

このオプションの指定を省略すると，すべてのMCF通信プロセスに対して，mcftactleコマンドを実行します。

●-l 論理端末名称　　～＜1～8文字の識別子＞

閉塞解除する論理端末の名称を指定します。

論理端末名称は，一度に8個まで指定できます。複数指定するときは，引用符（"）で囲んで，論理端末名称と論理端末名称との間を空白で区切ります。同一論理端末名称は重複して指定できません。

また，論理端末名称は，*を使って一括指定ができます。一括指定は一つだけ指定できます。一括指定と一括指定以外の論理端末名称を混在して指定できません。一括指定をするときは，引用符（"）で囲んで指定します。

*：すべての論理端末の閉塞を解除します。

先行文字列*：先行文字列で始まるすべての論理端末の閉塞を解除します。

〈複数指定の例〉　len1，len2，len3を指定する場合

-l "len1△len2△len3"

〈一括指定の例〉　lenで始まるすべての論理端末を指定する場合

-l "len*"

出力メッセージ

メッセージID | 内容 | 出力先
KFCA10350-I | mcftactleコマンドが入力されました。 | 標準出力
KFCA10351-E | MCF開始処理中です。 | 標準エラー出力
KFCA10352-E | MCF終了処理中です。 | 標準エラー出力
KFCA10353-W | 入力形式が誤っています。 | 標準エラー出力
KFCA10354-E | メモリ不足です。 | 標準エラー出力
KFCA10355-W | 引数の指定が誤っています。 | 標準エラー出力
KFCA10356-E | プロセス間でタイムアウトが発生しました。 | 標準エラー出力
KFCA10357-E | MCF内でタイムアウトが発生しました。 | 標準エラー出力
KFCA10358-E | 内部関数のエラーが発生しました。 | 標準エラー出力
KFCA10359-W | mcftactleコマンド入力元への応答を失敗しました。 | メッセージログファイル
KFCA10371-I | mcftactleコマンドを正常に受け付けました。 | 標準出力
KFCA10373-E | mcftactleコマンドが異常終了しました。 | 標準エラー出力
KFCA10380-E | 相手プロセスの検索に失敗しました。 | 標準エラー出力
KFCA10382-E | 指定した論理端末は登録されていません。 | 標準エラー出力
KFCA10503-I | ヘルプメッセージ | 標準出力
KFCA16402-E | RPC障害が発生しました。 | 標準エラー出力
KFCA18923-W | mcftactleコマンドは受け付けられません。 | メッセージログファイル

mcftdctle（論理端末の閉塞）

形式

mcftdctle 〔-s MCF通信プロセス識別子〕 -l 論理端末名称

機能

論理端末を閉塞します。

オプション

●-s MCF通信プロセス識別子　　～＜16進数字＞((01～ef))

MCF通信プロセス識別子を指定します。

MCF通信プロセス識別子は複数指定できません。

このオプションの指定を省略すると，すべてのMCF通信プロセスに対して，mcftdctleコマンドを実行します。

●-l 論理端末名称　　～＜1～8文字の識別子＞

閉塞する論理端末の名称を指定します。

論理端末名称は，一度に8個まで指定できます。複数指定するときは，引用符（"）で囲んで，論理端末名称と論理端末名称との間を空白で区切ります。同一論理端末名称は重複して指定できません。

また，論理端末名称は，*を使って一括指定ができます。一括指定は一つだけ指定できます。一括指定と一括指定以外の論理端末名称を混在して指定できません。一括指定をするときは，引用符（"）で囲んで指定します。

*：すべての論理端末を閉塞します。

先行文字列*：先行文字列で始まるすべての論理端末を閉塞します。

〈複数指定の例〉　len1，len2，len3を指定する場合

-l "len1△len2△len3"

〈一括指定の例〉　lenで始まるすべての論理端末を指定する場合

-l "len*"

出力メッセージ

メッセージID | 内容 | 出力先
KFCA10350-I | mcftdctleコマンドが入力されました。 | 標準出力
KFCA10351-E | MCF開始処理中です。 | 標準エラー出力
KFCA10352-E | MCF終了処理中です。 | 標準エラー出力
KFCA10353-W | 入力形式が誤っています。 | 標準エラー出力
KFCA10354-E | メモリ不足です。 | 標準エラー出力
KFCA10355-W | 引数の指定が誤っています。 | 標準エラー出力
KFCA10356-E | プロセス間でタイムアウトが発生しました。 | 標準エラー出力
KFCA10357-E | MCF内でタイムアウトが発生しました。 | 標準エラー出力
KFCA10358-E | 内部関数のエラーが発生しました。 | 標準エラー出力
KFCA10359-W | mcftdctleコマンド入力元への応答を失敗しました。 | メッセージログファイル
KFCA10371-I | mcftdctleコマンドを正常に受け付けました。 | 標準出力
KFCA10373-E | mcftdctleコマンドが異常終了しました。 | 標準エラー出力
KFCA10380-E | 相手プロセスの検索に失敗しました。 | 標準エラー出力
KFCA10382-E | 指定した論理端末は登録されていません。 | 標準エラー出力
KFCA10503-I | ヘルプメッセージ | 標準出力
KFCA16402-E | RPC障害が発生しました。 | 標準エラー出力
KFCA18924-W | mcftactleコマンドは受け付けられません。 | メッセージログファイル

注意事項

受信仕掛り中に運用コマンド（mcftdctle）を入力した場合は，受信仕掛り中のメッセージは破棄されます。以降の受信メッセージは入力キューに格納されません。

送信仕掛り中に運用コマンド（mcftdctle）を入力した場合は，一方送信メッセージの送信処理を中断しません。送信仕掛り中のメッセージの送信完了後に論理端末が閉塞されます。

mcftlsle（論理端末の状態表示）

形式

mcftlsle 〔-s MCF通信プロセス識別子〕 -l 論理端末名称〔-q〕〔-t〕

機能

論理端末の状態を標準出力に出力します。

オプション

●-s MCF通信プロセス識別子　　～＜16進数字＞((01～ef))

MCF通信プロセス識別子を指定します。

MCF通信プロセス識別子は，複数指定できません。

このオプションの指定を省略すると，すべてのMCF通信プロセスに対して，mcftlsleコマンドを実行します。

●-l 論理端末名称　　～＜1～8文字の識別子＞

状態を表示する論理端末の名称を指定します。

論理端末名称は，一度に8個まで指定できます。複数指定するときは，引用符（"）で囲んで，論理端末名称と論理端末名称との間を空白で区切ります。同一論理端末名称は重複して指定できません。

また，論理端末名称は，*を使って一括指定ができます。一括指定は一つだけ指定できます。一括指定と一括指定以外の論理端末名称を混在して指定できません。一括指定をするときは，引用符（"）で囲んで指定します。

*：すべての論理端末の状態を表示します。

先行文字列*：先行文字列で始まるすべての論理端末の状態を表示します。

〈複数指定の例〉　len1，len2，len3を指定する場合

-l "len1△len2△len3"

〈一括指定の例〉　lenで始まるすべての論理端末を指定する場合

-l "len*"

●-q

指定した論理端末に対応する出力キューの保留状態を表示します。

このオプションの指定を省略すると，論理端末に対応する出力キューの保留状態は表示しません。

●-t

指定した論理端末がセキュア状態かどうかを表示します。

出力形式

mmm llllllll sss [ggg] [tttt]
   SYNC xxxxxxxxxx yyyyyyyyyy zzzzzzzzzz
     IO     :          :         :
   PRIO     :          :         :
   NORM     :          :         :
   [iii ooo]

mmm：MCF識別子

llllllll：論理端末名称

sss：論理端末の状態
ACT…閉塞解除状態
DCT…閉塞状態

ggg：論理端末のセキュア状態（-tオプションの指定時だけ表示）
NOS…非セキュア状態
SEC…セキュア状態

tttt：論理端末のテストモード状態（TP1/Message Control/Tester使用時だけ表示）
TEST…テストモード
空白…非テストモード

SYNC：同期型メッセージ

IO：非同期型問い合わせ応答メッセージ

PRIO：非同期型一方送信メッセージ（優先）

NORM：非同期型一方送信メッセージ（一般）

xxxxxxxxxx：未送信メッセージ数

yyyyyyyyyy：未送信メッセージ最小通番

zzzzzzzzzz：未送信メッセージ最大通番

iii：出力キューの入力の保留状態（-qオプションの指定時だけ表示）
NOH…保留解除
HLD…保留

ooo：出力キューのスケジュールの保留状態（-qオプションの指定時だけ表示）
NOH…保留解除
HLD…保留

出力メッセージ

メッセージID | 内容 | 出力先
KFCA10350-I | mcftlsleコマンドが入力されました。 | 標準出力
KFCA10351-E | MCF開始処理中です。 | 標準エラー出力
KFCA10352-E | MCF終了処理中です。 | 標準エラー出力
KFCA10353-W | 入力形式が誤っています。 | 標準エラー出力
KFCA10354-E | メモリ不足です。 | 標準エラー出力
KFCA10355-W | 引数の指定が誤っています。 | 標準エラー出力
KFCA10356-E | プロセス間でタイムアウトが発生しました。 | 標準エラー出力
KFCA10357-E | MCF内でタイムアウトが発生しました。 | 標準エラー出力
KFCA10358-E | 内部関数のエラーが発生しました。 | 標準エラー出力
KFCA10359-W | mcftlsleコマンド入力元への応答を失敗しました。 | メッセージログファイル
KFCA10360-I | 状態表示を開始します。 | 標準出力
KFCA10364-I | 表示情報 | 標準出力
KFCA10365-I | 表示情報 | 標準出力
KFCA10369-I | 状態表示を終了します。 | 標準出力
KFCA10371-I | mcftlsleコマンドを正常に受け付けました。 | 標準出力
KFCA10373-E | mcftlsleコマンドが異常終了しました。 | 標準エラー出力
KFCA10380-E | 相手プロセスの検索に失敗しました。 | 標準エラー出力
KFCA10382-E | 指定した論理端末は登録されていません。 | 標準エラー出力
KFCA10502-I | ヘルプメッセージ | 標準出力
KFCA16402-E | RPC障害が発生しました。 | 標準エラー出力

7.　組み込み方法

この章では，TP1/NET/UDPをOpenTP1システムに組み込む方法について説明します。

＜この章の構成＞

7.1　TP1/NET/UDPの組み込みの流れ

7.2　MCFメイン関数の作成

7.3　定義オブジェクトファイルの生成

7.1　TP1/NET/UDPの組み込みの流れ

TP1/NET/UDPをOpenTP1システムに組み込むときの作業の流れを示します。

＜この節の構成＞

(1)　MCFメイン関数の作成

(2)　MCFサービス名の登録

(3)　システムサービス情報定義ファイルの作成

(4)　定義オブジェクトファイルの生成

(1)　MCFメイン関数の作成

TP1/NET/UDPを起動するためには，MCFメイン関数をコーディングし，コンパイル，およびリンケージしておく必要があります。詳細は，「7.2　MCFメイン関数の作成」を参照してください。

(2)　MCFサービス名の登録

TP1/NET/UDPを実行するために，MCFサービス名をシステムサービス構成定義で定義しておく必要があります。

MCFサービス名はMCFマネジャ定義オブジェクトファイル名と一致させてください。

詳細は，マニュアル「OpenTP1 システム定義」を参照してください。

(3)　システムサービス情報定義ファイルの作成

システムサービス情報定義ファイルをテキストエディタで作成します。作成するファイルのパス名は，「$DCDIR/lib/sysconf/システムサービス情報定義ファイル名」です。ファイルの定義形式については，5章の「システムサービス情報定義」を参照してください。

(4)　定義オブジェクトファイルの生成

OpenTP1のネットワークコミュニケーション定義の各ソースファイルから定義オブジェクトファイルを生成します。詳細は，「7.3　定義オブジェクトファイルの生成」を参照してください。

7.2　MCFメイン関数の作成

TP1/NET/UDPは，OpenTP1プロセスサービスによって起動されます。

TP1/NET/UDPを起動するためには，ユーザがMCFメイン関数をコーディングし，コンパイル，およびリンケージを行ってTP1/NET/UDPの実行形式プログラムを作成する必要があります。リンケージには，mcfpludpコマンドを使用します。

MCFメイン関数では，スタート関数（dc_mcf_svstart）を呼び出します。UOCを使用する場合は，MCFメイン関数でUOCの関数アドレスを指定してください。UOCは，MCFメイン関数と同じ言語（ANSI C，C++またはK&R版 C）で作成してください。

MCFメイン関数のコーディング概要を図7-1，図7-2に示します。また，ディレクトリへの組み込み方法を図7-3に示します。

なお，これらのコーディング例を次のファイルで提供しています。

適用OSがLinuxの場合

/opt/OpenTP1/examples/mcf/UDPIP/cmlib/ansi/com.c

/opt/OpenTP1/examples/mcf/UDPIP/cmlib/c/com.c

その他のOSの場合

/BeTRAN/examples/mcf/UDPIP/cmlib/ansi/com.c

/BeTRAN/examples/mcf/UDPIP/cmlib/c/com.c

図7-1　MCFメイン関数のコーディング概要（ANSI C，C++の場合）

図7-2　MCFメイン関数のコーディング概要（K&R版 Cの場合）

TP1/NET/UDPで提供するヘッダファイルを取り込みます。

使用するUOC関数をextern宣言します。UOCのリターン値はDCLONG型にしてください。
UOCをまったく使用しない場合，このコーディングは必要ありません。

UOCテーブルをextern宣言します。UOCを使用する場合，必ずこのとおりにコーディングしてください。
UOCをまったく使用しない場合，このコーディングは必要ありません。

各UOC関数のアドレスを，次に示すシステム提供変数に設定します。使用するUOCだけコーディングしてください。

dcmcf_uoctbl.msgrcv  /*入力メッセージ編集UOCアドレス*/
dcmcf_uoctbl.msgsend /*出力メッセージ編集UOCアドレス*/

UOCをまったく使用しない場合，このコーディングは必要ありません。

スタート関数を呼び出します。MCFメイン関数には必ずコーディングしてください。

図7-3　MCFメイン関数のディレクトリへの組み込み方法の概要

注※1

mcfpludpコマンドでリンケージします。

注※2

TP1/NET/UDPの実行形式プログラム名は，先頭がmcfuで始まる8文字以内の名称にしてください。

7.3　定義オブジェクトファイルの生成

定義オブジェクトファイルを次の手順で生成します。

ただし，開始から再開始の間に定義オブジェクトファイルを変更しないでください。変更した場合，再開始時に正常に動作しないおそれがあるためご注意ください。

テキストエディタを使用して，MCFの定義ファイルから，次に示す定義ソースファイルを作成します。

MCFマネジャ定義ソースファイル

MCF通信構成定義の共通定義ソースファイル

MCF通信構成定義のTP1/NET/UDPのプロトコル固有定義ソースファイル

MCFアプリケーション定義ソースファイル

MCF定義オブジェクト生成ユティリティを使用して，定義ソースファイルから，次に示すオブジェクトファイルを作成します。

MCFマネジャ定義オブジェクトファイル

MCF通信構成定義の共通定義オブジェクトファイル

MCF通信構成定義のTP1/NET/UDPのプロトコル固有定義オブジェクトファイル

MCFアプリケーション定義オブジェクトファイル

MCF定義結合ユティリティを使用して，MCF通信構成定義の共通定義とプロトコル固有定義のオブジェクトファイルを結合し，次に示すオブジェクトファイルを作成します。

MCF通信構成定義オブジェクトファイル

定義オブジェクトファイルの作成方法の概要を次の図に示します。

図7-4　定義オブジェクトファイルの作成方法の概要

注※1

次に示すコマンドで生成します。

mcfXXXX△-i△〔パス名〕入力ファイル名
      △-o△〔パス名〕出力オブジェクトファイル名

mcfXXXXは，ソースファイルごとに異なります。

mcfmngr：MCFマネジャ定義のソースファイル

mcfcomn：MCF通信構成定義のソースファイル

mcfudp：MCF通信構成定義のプロトコル（TP1/NET/UDP）固有定義ソースファイル

mcfapli：MCFアプリケーション定義ソースファイル

MCF定義オブジェクト生成ユティリティのmcfudpコマンドについては5章の「MCF定義オブジェクトの生成」を，その他のコマンドについてはマニュアル「OpenTP1 システム定義」を参照してください。

注※2

次に示すコマンドで，MCF通信構成定義の二つのオブジェクトファイルを結合します。

mcflink△-i△共通定義オブジェクトファイル名
      △TP1/NET/UDP定義オブジェクトファイル名
      △-o△出力オブジェクトファイル名

注※3

定義オブジェクトファイルは，システム環境定義のDCCONFPATHで指定したディレクトリに格納してください。システム環境定義については，マニュアル「OpenTP1 システム定義」を参照してください。

8.　障害対策

この章では，TP1/NET/UDPの運用中に発生するおそれがある障害と，TP1/NET/UDPの対応処理について説明します。

＜この章の構成＞

8.1　障害の種類と対応処理

8.1　障害の種類と対応処理

TP1/NET/UDPの障害発生時の処理について，次に示す障害の種類ごとに説明します。

運用中に障害が発生すると，TP1/NET/UDPはシステムを回復します。このとき，システム定義の指定によって，MCFイベント処理用MHPも起動できます。

TP1/NET/UDP運用中の障害と対応処理を次に示します。

理由コードの内容については，「付録C　理由コード一覧」を参照してください。

＜この節の構成＞

(1)　論理端末の閉塞解除失敗

(2)　バッファ障害

(3)　受信スケジュール関係障害（入力キュー，メッセージ受信）

(4)　送信スケジュール関係障害（メッセージ送信）

(5)　UOC障害

(6)　プロシジャ障害

(1)　論理端末の閉塞解除失敗

表8-1　論理端末の閉塞解除失敗と対応処理

障害の内容
TP1/NET/UDPの処理
ユーザの処理

論理端末の閉塞解除失敗

論理端末の閉塞解除失敗を通知するメッセージログ（KFCA18903-E）を出力します。

CERREVT（論理端末閉塞解除）を起動します。

障害の要因を取り除いたあと，運用コマンド（mcftactle）を入力して，論理端末を閉塞解除します。

(2)　バッファ障害

表8-2　バッファ障害と対応処理

障害の内容
TP1/NET/UDPの処理
ユーザの処理

受信バッファ不足

バッファ不足を通知するメッセージログ（KFCA10618-E），および論理端末障害を通知するメッセージログ（KFCA18902-E）を出力します。

受信メッセージを破棄します。

論理端末を閉塞します。

CERREVT（受信バッファ取得失敗）を起動します。

定義誤りの場合，誤りを訂正し，定義オブジェクトを作り直してOpenTP1を再開始します。

送信バッファ不足

バッファ不足を通知するメッセージログ（KFCA10618-E），および論理端末障害を通知するメッセージログ（KFCA18902-E）を出力します。

論理端末を閉塞します。

CERREVT（送信バッファ取得失敗）を起動します。

同期型メッセージの送信をしている場合，UAPにエラーリターンします。

定義誤りの場合，誤りを訂正し，定義オブジェクトを作り直してOpenTP1を再開始します。

送信バッファオーバフロー

メッセージ出力障害を通知するメッセージログ（KFCA10605-E 障害コード：-10341），および論理端末障害を通知するメッセージログ（KFCA18902-E）を出力します。

論理端末を閉塞します。

CERREVT（送信バッファオーバフロー）を起動します。

同期型メッセージの送信をしている場合，UAPにエラーリターンします。

定義誤りの場合，誤りを訂正し，定義オブジェクトを作り直してOpenTP1を再開始します。

(3)　受信スケジュール関係障害（入力キュー，メッセージ受信）

表8-3　受信スケジュール関係の障害と対応処理

障害の内容
TP1/NET/UDPの処理
ユーザの処理

入力キュー障害

スケジュール障害

UAP閉塞

サービス，サービスグループ閉塞

メッセージ入力障害を通知するメッセージログ（KFCA10604-E），および論理端末障害を通知するメッセージログ（KFCA18902-E）を出力します。

論理端末を閉塞します。

ERREVT2（メッセージ破棄通知）を起動します。

CERREVT（メッセージ入力障害）を起動します。

障害の要因を取り除いたあと，運用コマンド（mcftactle）を入力して，論理端末を閉塞解除します。

アプリケーション名形式不正

アプリケーション名取得失敗を通知するメッセージログ（KFCA10610-E），および論理端末障害を通知するメッセージログ（KFCA18902-E）を出力します。

論理端末を閉塞します。

ERREVT1（不正アプリケーション名検出）を起動します。

CERREVT（アプリケーション名取得障害）を起動します。

障害の要因を取り除いたあと，運用コマンド（mcftactle）を入力して，論理端末を閉塞解除します。

UDPプロトコル受信障害

論理端末障害を通知するメッセージログ（KFCA18902-E）を出力します。

論理端末を閉塞します。

CERREVT（メッセージ受信障害）を起動します。

障害の要因を取り除いたあと，運用コマンド（mcftactle）を入力して，論理端末を閉塞解除します。

(4)　送信スケジュール関係障害（メッセージ送信）

表8-4　送信スケジュール関係の障害と対応処理

障害の内容
TP1/NET/UDPの処理
ユーザの処理

メッセージ読み込み障害

メッセージ出力障害を通知するメッセージログ（KFCA10605-E 障害コード：-10341以外），および論理端末障害を通知するメッセージログ（KFCA18902-E）を出力します。

論理端末を閉塞します。

CERREVT（送信メッセージ取得失敗）を起動します。

同期型メッセージの送信をしている場合，UAPにエラーリターンします。

定義誤りの場合，誤りを訂正し，定義オブジェクトを作り直してOpenTP1を再開始します。

送信メッセージ長不正
（メッセージ長≦制御ヘッダ長）

論理端末障害を通知するメッセージログ（KFCA18902-E）を出力します。

論理端末を閉塞します。

CERREVT（送信メッセージサイズ不正）を起動します。

同期型メッセージの送信をしている場合，UAPにエラーリターンします。

UAPを見直し，障害の要因を取り除いたあと，運用コマンド（mcftactle）を入力して，論理端末を閉塞解除します。

UAP応答障害

論理端末障害を通知するメッセージログ（KFCA18902-E）を出力します。

論理端末を閉塞します。

CERREVT（UAP同期応答障害）を起動します。

UAPを見直し，障害の要因を取り除いたあと，運用コマンド（mcftactle）を入力して，論理端末を閉塞解除します。

UDPプロトコル送信障害

論理端末障害を通知するメッセージログ（KFCA18902-E）を出力します。

論理端末を閉塞します。

CERREVT（メッセージ送信障害）を起動します。

同期型メッセージの送信をしている場合，UAPにエラーリターンします。

障害の要因を取り除いたあと，運用コマンド（mcftactle）を入力して，論理端末を閉塞解除します。

(5)　UOC障害

表8-5　UOCの障害と対応処理

障害の内容
TP1/NET/UDPの処理
ユーザの処理

UOCエラーリターン

UOCエラーリターンを通知するメッセージログ（KFCA10611-E），および論理端末障害を通知するメッセージログ（KFCA18902-E）を出力します。

論理端末を閉塞します。

CERREVT（メッセージ編集UOCエラーリターン）を起動します。

同期型メッセージの送信をした場合に，出力メッセージ編集UOCで障害が発生したときは，UAPにエラーリターンします。

UOCを見直してください。

バッファ数不正

UOC不正を通知するメッセージログ（KFCA10620-E 障害コード：-11548），および論理端末障害を通知するメッセージログ（KFCA18902-E）を出力します。

論理端末を閉塞します。

CERREVT（使用バッファ数不正）を起動します。

同期型メッセージの送信をした場合に，出力メッセージ編集UOCで障害が発生したときは，UAPにエラーリターンします。

UOCを見直してください。

有効セグメント長不正

UOC不正を通知するメッセージログ（KFCA10620-E 障害コード：-11580），および論理端末障害を通知するメッセージログ（KFCA18902-E）を出力します。

論理端末を閉塞します。

CERREVT（有効セグメント不正）を起動します。

同期型メッセージの送信をした場合に，出力メッセージ編集UOCで障害が発生したときは，UAPにエラーリターンします。

UOCを見直してください。

編集バッファリストアドレス不正

UOC不正を通知するメッセージログ（KFCA10620-E 障害コード：-11581），および論理端末障害を通知するメッセージログ（KFCA18902-E）を出力します。

論理端末を閉塞します。

CERREVT（編集バッファアドレス不正）を起動します。

UOC不正を通知するメッセージログ（KFCA10620-E 障害コード：-11581），および論理端末障害を通知するメッセージログ（KFCA18902-E）を出力します。

同期型メッセージの送信をした場合に，出力メッセージ編集UOCで障害が発生したときは，UAPにエラーリターンします。

UOCを見直してください。

(6)　プロシジャ障害

表8-6　プロシジャの障害と対応処理

障害の内容
TP1/NET/UDPの処理
ユーザの処理

内部論理矛盾

内部論理矛盾を通知するメッセージログ（KFCA18999-E），および内部異常を通知するメッセージログ（KFCA15399-E）を出力します。

メモリダンプを出力します。

プロセスを異常終了します。

保守情報（$DCDIR/spoolディレクトリ以下）を退避してください。

付録

＜この付録の構成＞

付録A　メッセージ送受信の処理の流れ

付録B　障害発生時の処理の流れ

付録C　理由コード一覧

付録D　旧製品からの移行に関する注意事項

付録E　バージョンアップ時の変更点

付録F　用語解説

付録A　メッセージ送受信の処理の流れ

メッセージを送受信するときのデータの流れ，ジャーナル取得のタイミングを図A-1～図A-3に示します。

図A-1　一方送信メッセージの受信時の処理の流れ

図A-2　一方送信メッセージの送信時の処理の流れ

図A-3　同期型メッセージの送信時の処理の流れ

付録B　障害発生時の処理の流れ

障害発生時の処理の流れを図B-1および図B-2に示します。

図B-1　入力メッセージ編集UOCエラー時の処理の流れ

図B-2　出力メッセージ編集UOCエラーの処理の流れ

付録C　理由コード一覧

ERREVT2発生時の理由コードを表C-1に，CERREVT発生時の理由コードを表C-2に示します。

表C-1　ERREVT2の理由コード一覧

C言語の理由コード
（16進数字）
COBOL言語の理由コード
（外部10進数字）
ERREVT2の通知理由

DCMCF_NO_SERV
（0010）
0010
アプリケーション名に相当するMHPのサービスがありません。

DCMCF_SCD_ERR
（0020）
0020
RPC障害，サーバ未起動などによってMHPまたはSPPの起動に失敗しました。

DCMCF_QUE_BUF_ERR
（0030）
0030
メモリ不足のため，入力キューへの書き込みに失敗しました。

DCMCF_QUE_FIL_OVER
（0031）
0031
キューファイルが満杯のため，入力キューへの書き込みに失敗しました。

DCMCF_QUE_LIMIT_OVER
（0032）
0032
入力メッセージ最大格納数の定義指定値を超えたため，入力キューに書き込みませんでした。

DCMCF_QUE_IO_ERR
（0033）
0033
入力キューへの書き込み時に障害が発生しました。

DCMCF_AP_CLOSE
（0040）
0040
MHPのアプリケーションが閉塞中です。

DCMCF_AP_SECURE
（0041）
0041
MHPのアプリケーションがセキュア状態です。

DCMCF_SERV_CLOSE
（0042）
0042
MHPのサービスまたはサービスグループが閉塞中です。

DCMCF_SERV_SECURE
（0043）
0043
MHPのサービスグループがセキュア状態です。

DCMCF_ABNORMAL_END
（0050）
0050
MHPのセグメント受信関数にセグメントを渡す前に，MHPの異常が発生しました。

表C-2　CERREVTの理由コード一覧

理由コード1
（16進数字）
理由コード2
（16進数字）
内容

DCMUDP_RSN1_MCF
（00000001）（MCF障害）
DCMUDP_RSN2_ACTLE
(00000000)
論理端末の閉塞解除

DCMUDP_RSN2_SNBUF
(00000001)
送信バッファ取得失敗

DCMUDP_RSN2_REBUF
(00000002)
受信バッファ取得失敗

DCMUDP_RSN2_SBFOF
(00000003)
送信バッファオーバフロー

DCMUDP_RSN2_MSGET
(00000004)
送信メッセージ取得失敗

DCMUDP_RSN2_SMSGLN
(00000005)
送信メッセージサイズ不正

DCMUDP_RSN2_RSPUAP
(00000006)
UAP同期応答障害

DCMUDP_RSN2_SNDER
(00000007)
メッセージ送信障害

DCMUDP_RSN2_ITPUT
(00000008)
メッセージ入力障害

DCMUDP_RSN2_APNAM
(00000009)
アプリケーション名取得障害

DCMUDP_RSN2_RCVER
(0000000A)
メッセージ受信障害

DCMUDP_RSN1_UOC
（00000003）（UOC障害）
UOCからの詳細リターンコード
入力および出力メッセージ編集UOCエラーリターン

DCMUDP_RSN2_BCNT
(00000001)
使用バッファ数不正

DCMUDP_RSN2_SEG
(00000002)
有効セグメント不正

DCMUDP_RSN2_BADR
(00000003)
編集バッファアドレス不正

付録D　旧製品からの移行に関する注意事項

＜この節の構成＞

(1)　ソースの互換性

(2)　メッセージログの英語出力

(1)　ソースの互換性

Version 6以前からVersion 7へ移行する場合の各種ソースファイルの互換性について説明します。

Version 6以前からVersion 7へ移行する場合，Version 6以前で使用していたソースファイルをそのまま使用できないことがあります。ソースファイルの互換性は，次の表に示すとおりです。

表D-1　Version 6以前で使用していたソースファイルの互換性

ソースファイルを作成した言語 | 互換性
C言語 | 32ビット | UAPおよびUOCのソースファイルを変更しないで使用できます。
64ビット | ソースファイルを変更する必要があります。※
COBOL言語 | UAPのソースファイルおよびMCF通信構成定義（プロトコル固有の定義）の定義ソースファイルを変更しないで使用できます。

注※

Version 7では，メッセージ送受信インタフェース，UOC，およびMCFイベントインタフェースのそれぞれの引数ならびにパラメタの型が変更されています。そのため，Version 6のUAPおよびUOCのソースファイルを見直す必要があります。

(2)　メッセージログの英語出力

Version7では，TP1/NET/UDPのメッセージログ（KFCA189XX-X）を日本語または英語で出力できます。

言語種別は，システム共通定義のputenv形式の環境変数LANGの指定値を変更することで設定できます。言語種別の設定方法についての詳細は，マニュアル「OpenTP1 システム定義」のシステム共通定義について説明している個所を参照してください。

付録E　バージョンアップ時の変更点

各バージョンでのメッセージ，または定義の変更点について説明します。

＜この節の構成＞

付録E.1　07-00での変更点

付録E.2　06-02での変更点

付録E.1　07-00での変更点

TP1/NET/UDP 07-00での変更点を次の表に示します。

表E-1　TP1/NET/UDP 07-00での変更

種別 | 分類 | 内容
追加 | メッセージ | 日本語UTF-8メッセージ（LANG ja_JP.UTF-8）に対応※
英文メッセージを追加

注※

ご使用のOSがLinuxの場合だけサポートしています。

付録E.2　06-02での変更点

TP1/NET/UDP 06-02での変更点を次の表に示します。

表E-2　TP1/NET/UDP 06-02での変更

種別 | 分類 | 内容
追加 | 定義 | MCF通信構成定義のmcftalcle定義コマンドの-rオプションのreuseオペランド

付録F　用語解説

（英字）

GJ（メッセージ受信ジャーナル）

メッセージ受信時に取得される情報です。メッセージ長，論理端末名称などで構成されます。

GJの取得タイミングは，receiveを発行して，入力キューから取り出したメッセージをUAPに渡す直後です。

IJ（メッセージ入力ジャーナル）

入力キューに入力された情報です。論理端末名称，および入力メッセージの情報で構成されます。

IJの取得タイミングは相手システムから受信したメッセージを入力キューに入力する直前です。

MJ（メッセージジャーナル）

メッセージに関する情報です。端末名称，メッセージ種別，入力メッセージ編集前のデータ，出力メッセージ編集後のデータなどで構成されます。

MJの取得タイミングはメッセージ送信前，出力メッセージ編集UOC処理後，および入力メッセージ編集UOC処理前です。

UDPプロトコル

RFC 768で規約されたプロトコル規約です。

（ナ行）

入力キュー

処理要求として入力メッセージを管理する待ち行列です。

（ハ行）

ブロードキャストメッセージ

同一のLANに接続されているすべての端末に送信されるメッセージです。

ポート番号

ネットワーク上で提供する，各サービスに付ける固有の番号です。

ホストグループ

一つのマルチキャストアドレスを共有するネットワーク上の端末の集まりです。

（マ行）

マルチキャスト

このマニュアルでは，RFC 1112で規約されたIPマルチキャストを指します。

マルチキャストメッセージ

特定の一つのホストグループを指定して送信するメッセージです。

ホストグループに参加している複数の端末が受信します。

（ユ行）

ユニキャストメッセージ

特定の端末を指定して送信するメッセージです。

（ラ行）

論理端末

TP1/NET/UDPとUAPとの通信接点です。TP1/NET/UDPでは，論理端末を通してメッセージの送受信をします。

索引

[Ａ][Ｃ][Ｄ][Ｅ][Ｇ][Ｈ][Ｉ][Ｍ][Ｐ][Ｒ][Ｓ][Ｔ][Ｕ]
[ア行][カ行][サ行][タ行][ナ行][ハ行][マ行][ヤ行][ラ行]

(英字)

(Ａ)

AP間通信

AP間通信の概要

AP間通信の形態

AP間通信の仕組み

AP間通信の注意事項

AP間通信メッセージの送受信

(Ｃ)

CBLDCMCF('RECEIVE ') － 一方送信メッセージの受信（COBOL言語）

CBLDCMCF('RESEND ') － メッセージの再送（COBOL言語）

CBLDCMCF('SEND ') － 一方送信メッセージの送信（COBOL言語）

CBLDCMCF('SENDSYNC') － 同期型メッセージの送信（COBOL言語）

CCLSEVT

CCLSEVT

CERREVT

CERREVT

CERREVTの理由コード

COBOL言語のメッセージ送受信

COPNEVT

COPNEVT

count

C言語のメッセージ送受信

(Ｄ)

dc_mcf_receive － 一方送信メッセージの受信（C言語）

dc_mcf_resend － メッセージの再送（C言語）

dc_mcf_send － 一方送信メッセージの送信（C言語）

dc_mcf_sendsync － 同期型メッセージの送信（C言語）

(Ｅ)

ERREVT1

ERREVT1

ERREVT2

ERREVT2

ERREVT2の理由コード

ERREVT3

ERREVT3

ERREVTA

ERREVTA

(Ｇ)

GJ（メッセージ受信ジャーナル）

(Ｈ)

hostgroupaddr

hostgroupname

hostname

(Ｉ)

IJ（メッセージ入力ジャーナル）

ipaddr

IPアドレス

(Ｍ)

max_open_fds

max_socket_descriptors

MCF

mcfapli

mcfcomn

mcflink

mcfmngr

mcftactle

mcftalced

mcftalcle

mcftalcleコマンドの指定条件

mcftbuf

mcftbuf

mcftbuf

mcftbuf

mcftbuf

mcftbuf

mcftdctle

mcftlsle

mcfudp

MCFアプリケーション定義

MCFイベント

MCFイベントインタフェース

MCFイベント処理用MHP

MCFイベント処理用MHP

MCFイベント通知時のセグメント構成

MCFイベントの共通ヘッダ

MCFイベントの種類

MCFサービス名の登録

MCF通信構成定義

MCF通信プロセスでアクセスするファイルの最大数

MCF定義オブジェクトの生成

MCFで使用する定義ファイル

MCFマネジャ定義

MCFメイン関数の作成

MJ（メッセージジャーナル）

module

msgbuf

multicast

multicastttl

(Ｐ)

portno

(Ｒ)

rcvbuf

RECEIVE － メッセージの受信（データ操作言語）

reuse

rhostname

ripaddr

(Ｓ)

SEND － メッセージの送信（データ操作言語）

sndbuf

sysrcvsize

syssndsize

(Ｔ)

TP1/Message Control

TP1/NET/Library

TP1/NET/UDPの運用コマンド

TP1/NET/UDPのシステム構成例

TP1/NET/UDPの実行形式プログラム名

TP1/NET/UDPを使用したネットワーク構成の例

TTL

(Ｕ)

UAP異常終了通知イベント

UDPプロトコル

UOCインタフェース用のパラメタとバッファの関係

UOC作成上の注意事項

UOCで使用できる関数

UOCの異常処理

UOCの構造

UOCの実行タイミング

(ア行)

(あ)

相手アドレスのチェック

アプリケーション名

アプリケーション名の決定

アプリケーション名の決定

(い)

一方受信

一方送信メッセージの受信

一方送信メッセージの受信時の処理の流れ

一方送信メッセージの送信

一方送信メッセージの送信時の処理の流れ

(う)

運用コマンド

(カ行)

(か)

概要

(き)

機能

旧製品からの移行に関する注意事項

(く)

組み込み方法

(サ行)

(さ)

参加するホストグループのIPアドレス

参加するホストグループのホスト名

(し)

自システムのIPアドレス

自システムのIPアドレス

自システムのポート番号

自システムのホスト名

自システムのホスト名

システムサービス共通情報定義

システムサービス情報定義

システム定義

システムのメッセージ受信バッファ長

システムのメッセージ送信バッファ長

システムバッファ

出力キュー

出力メッセージの編集

出力メッセージの編集UOC

出力メッセージ編集UOCインタフェース

出力メッセージ編集UOCエラー

障害対策

障害通知イベント

障害の種類と対応処理

障害発生時の処理の流れ

状態通知イベント

(せ)

制御ヘッダ

制御ヘッダの形式

(そ)

送信するマルチキャストパケットの生存期間

送信メッセージの通番編集

送信メッセージの通番編集UOC

送信メッセージの通番編集UOCインタフェース

ソケット用ファイル記述子の最大数

ソフトウェア構成の例

ソフトウェアの構成

(タ行)

(た)

タイマ起動メッセージ廃棄通知イベント

端末タイプ

(つ)

通信相手のアドレスの指定

(て)

定義オブジェクトファイルの生成

定義の指定順序

定義例

データ操作言語（COBOL言語）のメッセージ送受信

(と)

同期型メッセージの送信

同期型メッセージの送信時の処理の流れ

特定の一つの相手に対する一方送信

特定の一つの相手に対する同期送信

特定の複数の相手に対する一方送信

特定の複数の相手に対する同期送信

(ナ行)

(に)

入力キュー

入力キュー

入力メッセージの編集

入力メッセージの編集とアプリケーション名の決定

入力メッセージ編集UOC

入力メッセージ編集UOCインタフェース

入力メッセージ編集UOCエラー

(ハ行)

(ひ)

ビッグエンディアン

(ふ)

複数のMCF通信プロセスによる同一ポート番号の共用

不正アプリケーション名検出通知イベント

不特定の相手に対する一方送信

不特定の相手に対する同期送信

ブロードキャストメッセージ

ブロードキャストメッセージ送信時の最大メッセージ長

プロトコルの種別

(ほ)

ポート番号

ポート番号

ホストグループ

(マ行)

(ま)

マルチキャスト

マルチキャストメッセージ

(み)

未処理送信メッセージ廃棄通知イベント

(め)

メッセージ受信用バッファグループ番号

メッセージ制御機能

メッセージ送受信インタフェース

メッセージ送受信インタフェースの一覧

メッセージ送受信の関数（C言語）

メッセージ送受信の関数に対応するプログラム（COBOL言語）

メッセージ送受信の処理の流れ

メッセージ送受信の通信文（データ操作言語）

メッセージ送信用バッファグループ番号

メッセージ長

メッセージの種類の判別

メッセージのデータ形式

メッセージの保証

メッセージ廃棄通知イベント

メッセージ編集用バッファグループ番号

メッセージ編集用バッファ数

(ヤ行)

(ゆ)

ユーザアプリケーションプログラム作成例

ユーザオウンコーディング

ユーザオウンコーディングインタフェース

ユニキャストメッセージ

(ラ行)

(り)

理由コード一覧

(ろ)

論理端末

論理端末定義の開始

論理端末定義の終了

論理端末とアプリケーションの型の関係

論理端末の状態表示

論理端末の閉塞

論理端末の閉塞

論理端末の閉塞解除

論理端末の閉塞解除

論理端末名称

■ 商標類

AIXは，米国における米国International Business Machines Corp.の登録商標です。
AMDは，Advanced Micro Devices, Inc.の商標です。
Ethernetは，米国Xerox Corp.の商品名称です。
Itaniumは，アメリカ合衆国および他の国におけるインテルコーポレーションまたはその子会社の登録商標です。
Linuxは，Linus Torvaldsの米国およびその他の国における登録商標あるいは商標です。
Red Hatは，米国およびその他の国でRed Hat,Inc.の登録商標若しくは商標です。
UNIXは，X/Open Company Limited が独占的にライセンスしている米国ならびに他の国における登録商標です。