Netcompo アプリケーション会話サービス 2.1.1 LU0会話サービス編 - Solaris OE - |
目次
索引
![]() ![]() |
本章では、LU0会話サービスが提供するマクロ命令の動作シーケンスについて説明します。
各マクロ命令の発行タイミングをまとめた、マクロ命令発行マトリックスを"表:マクロ命令発行マトリックス"と"図:状態遷移図"に示します。
マクロ命令 |
完了通知モード |
状態 |
|||||||
---|---|---|---|---|---|---|---|---|---|
1:未open |
2:open済 |
3:接続中 |
4:接続済 |
5:送信中 |
6:受信中 |
7:切断中 |
8:切断中 (完了待ち) |
||
lu0open1 |
同期 |
2 |
× |
× |
× |
× |
× |
× |
× |
lu0close |
同期 |
× |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
lu0cnct |
同期 |
× |
4 |
× |
× |
× |
× |
× |
× |
非同期 |
× |
3 |
× |
× |
× |
× |
× |
× |
|
lu0disc |
同期 |
× |
× |
8 |
2 |
8 |
8 |
× |
× |
非同期 |
× |
× |
7 |
7 |
7 |
7 |
× |
× |
|
lu0write |
同期 |
× |
× |
× |
○ |
× |
× |
× |
× |
非同期 |
× |
× |
× |
5 |
× |
× |
× |
× |
|
lu0read |
同期 |
× |
× |
× |
○ |
× |
× |
× |
× |
非同期 |
× |
× |
× |
6 |
× |
× |
× |
× |
|
lu0check |
同期 |
× |
× |
× |
○ |
× |
× |
× |
× |
lu0can |
同期 |
× |
× |
× |
× |
× |
○ |
× |
× |
lu0getb |
同期 |
× |
○ |
× |
× |
× |
× |
× |
× |
lu0freb |
同期 |
× |
○ |
× |
× |
× |
× |
× |
× |
lu0rcv |
非同期 |
× |
× |
4(lu0cnct) |
× |
4(lu0write) |
4(lu0read) |
2(lu0disc) |
2(実行中マクロ命令) |
数字:マクロ命令の正常復帰時に数字の状態に遷移します。lu0rcvマクロ命令は、括弧内のマクロ命令完了まで繰り返し発行してください。 ○:発行可能 ×:発行不可能(何らかのエラーで完了します)
同期型とは、LU0会話サービスでの処理の完了を待ち合わせて、アプリケーションプログラムに復帰することをいいます。
非同期型とは、LU0会話サービスでの処理の完了を待ち合わせず、アプリケーションプログラムに復帰することをいいます。
同期型は非同期型と比較すると、同期型はアプリケーションプログラムの構造が簡素になりますが、ホストシステムからデータ受信待ちや応答待ちの間、他の処理ができません。非同期型はマクロ命令を受け付けた時点でアプリケーションプログラムに復帰するため、マクロ命令が完了するまでの間、他の処理ができます。
ホスト以外のプロセスと同時に通信を行う場合(クライアントシステムとの通信や同一システム内のプロセス間通信など)、パイプやソケットなどのファイルディスクリプタを使用するプロセス間通信を使用してください。ファイルディスクリプタを使用することにより、pollシステムコールやselect関数で非同期型マクロ命令の完了と他プロセス間通信のイベントを同時に待ち合わせることができます。
ホスト側のイベントが長時間受け取れない場合、ホストの停止ができないなど、運用に影響することがあります。
非同期型マクロ命令を使用する場合、以下の点に注意してください。
- 処理の完了を受け取る場合、アプリケーションプログラムは、pollシステムコールで事象を待ち合わせた後、lu0rcvマクロ命令を発行して完了を受け取ってください。
- 同じマクロ命令を続けて発行する場合は、必ず先に発行したマクロ命令の完了を受け取ってから次のマクロ命令を発行してください。完了を受け取らずに次のマクロ命令を発行するとマクロシーケンスエラーとなります。
- 非同期型マクロ命令でLU0会話サービスに渡したバッファの内容は、マクロ命令が完了するまで参照または更新しないでください。
各マクロ命令の非同期型と同期型の提供有無を“表:マクロ命令の同期型と非同期型有無”に示します。また、"図:同期型マクロ命令のシーケンス"に同期型マクロ命令のシーケンス、"図:非同期型マクロ命令のシーケンス"に非同期型マクロ命令のシーケンスを示します。
マクロ命令 |
同期型 |
非同期型 |
---|---|---|
lu0open1 |
○ |
× |
lu0close |
○ |
× |
lu0cnct |
○ |
○ |
lu0disc |
○ |
○ |
lu0read |
○ |
○ |
lu0write |
○ |
○ |
lu0check |
○ |
× |
lu0can |
○ |
× |
○:あり、×:なし
マルチスレッドに対応したアプリケーションプログラムを開発する上で、以下の点に注意してください。
LU0ライブラリをアクセスするときに、同時にアクセスできるのはLU毎です。1つのLUを複数のスレッドで使用する場合は、LU0ライブラリを呼び出す前にアプリケーションで排他制御を行ってください。
アプリケーションプログラムの登録は、lu0open1マクロ命令を発行します。
"図:lu0open1マクロ命令のシーケンス"にlu0open1マクロ命令のシーケンスを示します。
アプリケーションプログラムの登録抹消は、lu0closeマクロ命令を発行します。
"図:lu0closeマクロ命令のシーケンス"にlu0closeマクロ命令のシーケンスを示します。
ホストとのセション確立は、lu0cnctマクロ命令を発行します。
端末主導型は、端末が相手ホストシステムに、セション確立要求(INIT-SELF)を送信して、相手ホストシステムがセション確立指示(BIND)を送信することでセションを確立します。
"図:lu0cnctマクロ命令のシーケンス(1)"に端末主導型のlu0cnctマクロ命令のシーケンスを示します。
ホスト主導型は、相手ホストシステムがセション確立指示(BIND)を送信することでセションを確立します。
"図:lu0cnctマクロ命令のシーケンス(2)"にホスト主導型のlu0cnctマクロ命令のシーケンスを示します。
lu0cnctマクロ命令のパラメタで、SSCPデータ通知ありと指定した場合、相手ホストシステムからSSCPデータを受信するとSSCPデータを通知します。SSCPデータを受信せずにBINDを受信した場合、BINDを通知します。
SSCPデータ通知なしと指定した場合、相手ホストシステムから受信したSSCPデータは破棄します。
"図:lu0cnctマクロ命令のシーケンス(3)"にSSCPデータを受信した場合の、lu0cnctマクロ命令のシーケンスを示します。
"図:lu0cnctマクロ命令のシーケンス(4)"にINIT-SELFに対して-RESPを受信した場合の、lu0cnctマクロ命令のシーケンスを示します。
"図:lu0cnctマクロ命令のシーケンス(5)"にPROC-ERRORを受信した場合の、lu0cnctマクロ命令のシーケンスを示します。
"図:lu0cnctマクロ命令のシーケンス(6)"にホストとのセション確立を拒否する場合の、lu0cnctマクロ命令のシーケンスを示します。
"図:lu0cnctマクロ命令のシーケンス(7)"にBINDコマンドのセションパラメタで異常を検出した場合の、lu0cnctマクロ命令のシーケンスを示します。
lu0cnctマクロ命令のブラケットプロトコル制御とBINDパラメタのブラケット使用の指定が違っていると、セションパラメタエラーでセション確立を拒否します。
ホストとのセション解放は、lu0discマクロ命令を発行します。
端末主導型は、端末が相手ホストシステムにセション解放要求(TERM-SELF)を送信して、相手ホストシステムがセション解放指示(UNBIND)を送信することでセションを解放します。
"図:lu0discマクロ命令のシーケンス(1)"に端末主導型の、lu0discマクロ命令のシーケンスを示します。
非同期型のlu0cnctマクロ命令処理中に、lu0discマクロ命令を発行することでlu0cnctマクロ命令を取り消すことができます。lu0discマクロ命令を同期型で発行した場合、lu0cnctマクロ命令の完了が、lu0discマクロ命令の完了後に通知されます。lu0discマクロ命令を非同期型で発行した場合、lu0cnctマクロ命令の完了、lu0discマクロ命令の正常完了の順に通知されます。
"図:lu0discマクロ命令のシーケンス(2)"に端末主導型(セション確立中)の、lu0discマクロ命令のシーケンスを示します。
非同期型のlu0readマクロ命令処理中に、lu0discマクロ命令を発行することでlu0readマクロ命令を取り消し、セションを解放します。lu0discマクロ命令を同期型で発行した場合、lu0readマクロ命令の完了が、lu0discマクロ命令の完了後に通知されます。lu0discマクロ命令を非同期型で発行した場合、lu0readマクロ命令の完了、lu0discマクロ命令の正常完了の順に通知されます。
"図:lu0discマクロ命令のシーケンス(3)"に端末主導型(データ受信中)の、lu0discマクロ命令のシーケンスを示します。
非同期型のlu0writeマクロ命令処理中に、lu0discマクロ命令を発行することでlu0writeマクロ命令を取り消し、セションを解放します。lu0discマクロ命令を同期型で発行した場合、lu0writeマクロ命令の完了が、lu0discマクロ命令の完了後に通知されます。lu0discマクロ命令を非同期型で発行した場合、lu0writeマクロ命令の完了、lu0discマクロ命令の正常完了の順に通知されます。
"図:lu0discマクロ命令のシーケンス(4)"に端末主導型(データ送信中)の、lu0discマクロ命令のシーケンスを示します。
ホスト主導型は、相手ホストシステムがUNBINDを送信することで、セションを解放します。
"図:lu0discマクロ命令のシーケンス(5)"にホスト主導型(データ受信中)の、lu0discマクロ命令のシーケンスを示します。
"図:lu0discマクロ命令のシーケンス(6)"にホスト主導型(データ送信中)の、lu0discマクロ命令のシーケンスを示します。
データ送信は、lu0writeマクロ命令を発行します。
lu0cnctマクロ命令のパラメタで、チェーンデータスルー制御を行うと指定することにより、アプリケーションプログラムでデータの分割と組立を制御できます。
データ分割時のデータ長は、lu0cnctマクロ命令の完了時に通知される上り最大RU長の値以内の長さでアプリケーションプログラムがデータを分割して、lu0writeマクロ命令を発行してください。そのとき、lu0writeマクロ命令で送信するデータのチェーンの種別を設定してください。
チェーンの種別 |
送信状態 |
|
---|---|---|
(1)分割前 |
(2)分割中 |
|
単一データ(Only) |
○ |
× |
分割時、最初のデータ(First) |
(2) |
× |
分割時、途中のデータ(Middle) |
× |
○ |
分割時、最後のデータ(Last) |
× |
(1) |
×:設定不可。 ○:設定可。状態遷移なし。 (1):設定可。送信後、状態(1)分割前に遷移。 (2):設定可。送信後、状態(2)分割中に遷移。
チェーン分割の途中にアプリケーションプログラムで送信を中断する場合、lu0discマクロ命令を発行して、セションを解放してください。
"図:lu0writeマクロ命令のシーケンス(1)"にチェーンデータスルー制御を行わない場合、"図:lu0writeマクロ命令のシーケンス(2)"にチェーンデータスルー制御を行う場合の、lu0writeマクロ命令のシーケンスを示します。
"図:lu0writeマクロ命令のシーケンス(3)"に-RESPを受信した場合の、lu0writeマクロ命令のシーケンスを示します。
lu0cnctマクロ命令のパラメタで、送信権獲得制御を行うと設定することにより、lu0writeマクロ命令を契機に、LU0会話サービスが送信権を獲得します。
送信権獲得制御を行わないと設定した場合、相手ホストシステムから送信権を譲渡されるまで、lu0writeマクロ命令は、送信権なし(完了情報:ELU0SND,詳細情報:ELU0NOCD)で完了します。
ブラケットプロトコル制御を使用して、端末と相手ホスト双方からデータを送信する場合、送信権獲得制御を行うと設定することで、データの衝突を認識できます。
"図:lu0writeマクロ命令のシーケンス(4)"に送信権獲得制御を行わない場合、"図:lu0writeマクロ命令のシーケンス(5)"に送信権獲得制御を行う場合の、lu0writeマクロ命令のシーケンスを示します。
lu0cnctマクロ命令のパラメタで、応答要求スルー制御を行うと指定することで、アプリケーションプログラムが、確定応答要求と例外応答要求の応答要求種別を制御できます。
アプリケーションプログラムで指定可能な応答要求種別は、相手ホストから受信するBINDパラメタで決まり、lu0cnctマクロ命令の完了情報の“応答要求の送信種別”で通知します。
lu0cnctマクロ命令の動作モード情報で応答要求スルー制御を行わない指定にして、セションパラメタの設定が"確定/例外(DR/ER)"の場合、LU0会話サービスは確定応答要求でデータを送信します。
例外応答要求でデータを送信する場合は、セションパラメタの設定を"例外(ER)"にしてください。
確定応答要求は、相手ホストシステムに届いたことを確認するもので、相手ホストシステムの業務が正常に行われたことを保証するものではありません。
応答要求スルー制御を行わない場合の、lu0writeマクロ命令のシーケンスを"図:lu0writeマクロ命令のシーケンス(6)"に、応答要求スルー制御が行うで、BINDのセションパラメタの指定が"確定/例外(DR/ER)"の場合のlu0writeマクロ命令のシーケンスを"図:lu0writeマクロ命令のシーケンス(7)"に、"確定(DR)"の場合のlu0writeマクロ命令のシーケンスを"図:lu0writeマクロ命令のシーケンス(8)"に、"例外(ER)"の場合のlu0writeマクロ命令のシーケンスを"図:lu0writeマクロ命令のシーケンス(9)"に示します。
lu0cnctマクロ命令のパラメタで、ブラケットプロトコル制御を行う指定にして、相手ホストから受信するBINDパラメタでブラケットを使用すると設定すると、相手ホストシステムとの間でブラケットプロトコルが使用できます。
自システムと相手ホストシステム双方からブラケットを開始する場合、送信権獲得制御を行わないと設定することでブラケットの衝突を検出できます。
"図:lu0writeマクロ命令のシーケンス(10)"にブラケットプロトコル制御を行う場合の、lu0writeマクロ命令のシーケンスを示します。
データ受信は、lu0readマクロ命令を発行します。
lu0cnctマクロ命令のパラメタで、チェーンデータスルー制御を行うと指定することにより、アプリケーションプログラムでデータの分割と組立を制御できます。
"図:lu0readマクロ命令のシーケンス(1)"にチェーンデータスルー制御を行わない場合の、"図:lu0readマクロ命令のシーケンス(2)"にチェーンデータスルー制御を行う場合の、lu0readマクロ命令のシーケンスを示します。
lu0cnctマクロ命令のパラメタで、-RESP制御を行うと指定することにより、アプリケーションプログラムが受信データに対し-RESPを送信できます。
-RESP制御を行わないと指定した場合、+RESPの送信はlu0readマクロ命令の完了を契機に行います。
-RESP制御を行うと指定した場合、-RESPの送信は、送信コマンドに-RESPを指定したlu0writeマクロ命令を発行することで行います。また、+RESPの送信は、lu0read, lu0chcek,lu0can,lu0discの各マクロ命令の発行か、送信コマンドに-RESP以外を指定したlu0writeマクロ命令を発行することで行います。
"図:lu0readマクロ命令のシーケンス(3)"に-RESP制御を行う場合の、lu0readマクロ命令のシーケンスを示します。
ブラケットプロトコル制御を使用する場合の lu0readマクロ命令のシーケンスで、"図:lu0readマクロ命令のシーケンス(4)"にBBによるブラケットの開始を、"図:lu0readマクロ命令のシーケンス(5)"に BIDコマンドによるブラケットの開始を示します。
"図:lu0readマクロ命令のシーケンス(6)"に緩終了指示の受信要求を指定したlu0readマクロ命令のシーケンスを示します。
なお、ホストからデータを受信する可能性があるため、セション切断が通知されるまでlu0readマクロ命令を発行して、その後、lu0discマクロ命令でホストとのセションの解放を行ってください。
相手ホストシステムからデータ受信済。伝送路の異常などの通信エラーがLU0会話サービスで保留しているか、lu0checkマクロ命令を発行して確認します。
"図:lu0checkマクロ命令のシーケンス"に、lu0checkマクロ命令のシーケンスを示します。
lu0readマクロ命令のキャンセルは、lu0canマクロ命令を発行します。
"図:lu0canマクロ命令のシーケンス(2)"に非同期型lu0readマクロ命令のキャンセルのシーケンスを示します。
送受信バッファの獲得は、lu0getbマクロ命令を発行します。
"図:lu0getbマクロ命令のシーケンス"に、lu0getbマクロ命令のシーケンスを示します。
送受信バッファの解放は、lu0frebマクロ命令を発行します。
"図:lu0frebマクロ命令のシーケンス"に、lu0frebマクロ命令のシーケンスを示します。
非同期型マクロ命令を使用する場合、発行したすべてのマクロ命令の完了をlu0rcvマクロ命令で受け取ってから発行してください。完了を受け取らず、使用中のままlu0frebマクロ命令を発行するとエラー完了(EL0BUSE)して、バッファ(共用メモリ)が解放されません。
長期間の運用でシステムダウンの原因となります。
タイマ監視は、同期型のlu0cnctマクロ命令とlu0readマクロ命令でタイマ値を指定することで有効になります。
端末主導型のlu0cnctマクロ命令でタイマ監視を行う場合、ホスト間の状態によって、FNA-BASE環境設定のLU情報定義にあるacttimとresptimに定義したタイマ値を加算した時間タイムアウトしないことがあります。
セションの一括解放は、アプリケーションプログラムの終了を契機に行われます。
セションの一括解放は、アプリケーションプログラムの終了を契機に開始します。そのため、アプリケーションプログラムを再起動したとき、lu0cnctマクロ命令が“設定されたLU名は、他のプロセスで使用されています(ELU0USE)”で完了することがあります。
" 図:アプリケーションプログラムの終了シーケンス"に、セションの一括解放のシーケンスを示します。
非同期型マクロ命令の完了受け取りは、pollシステムコールで事象を待ち合わせてから、lu0rcvマクロ命令を発行することで行います。pollシステムコールで事象を待ち合わせずにlu0rcvマクロ命令を発行した場合と、非同期型マクロ命令を発行せずに本マクロ命令を発行した場合はエラー完了します。
"図:lu0rcvマクロ命令のシーケンス(1)"に非同期型マクロ命令の完了受け取りシーケンスを、"図:lu0rcvマクロ命令のシーケンス(2)"にpollシステムコール未発行での完了受け取りシーケンスを、"図:lu0rcvマクロ命令のシーケンス(3)"に非同期型マクロ命令未発行での完了受け取りシーケンスを示します。
目次
索引
![]() ![]() |