2.1.10 コネクションリプレース(サーバ型コネクション)
コネクションリプレースは,相手システムからコネクション確立要求を受け付けた場合,TP1/NET/TCP/IPに割り当て可能な未確立コネクションがなければ,確立状態にある既存のコネクションを切断し,新たなコネクション確立要求を受け付ける機能です。コネクションリプレースを使用しない場合に比べ,相手システムでの障害検出を契機としたコネクションの再確立を迅速に行えます。
コネクションリプレースは,コネクション定義(mcftalccn -h)のchgconnオペランドにreplaceを指定したサーバ型コネクションに対して使用できます。コネクションリプレースを使用する場合の注意事項については,「(4) コネクションリプレースを使用するときの注意事項」を参照してください。
コネクションの切断については,「2.1.9 コネクション障害」を参照してください。
- 〈この項の構成〉
(1) コネクションリプレースの概要
コネクションリプレースを使用しない場合と使用する場合に分け,相手システムが障害を検出したあとの処理について説明します。
(a) コネクションリプレースを使用しない場合
相手システムがTP1/NET/TCP/IPよりも先に障害を検出し,コネクションの再確立を要求した場合,割り当て可能な未確立コネクションがなければ,コネクション確立要求によって一時的に受け入れた新しいコネクションを解放します。
なお,次の状態になるまで,該当のコネクションは再確立できません。
-
ユーザが障害を検出して運用コマンド(mcftdctcn)を入力するか,またはAPI(dc_mcf_tdctcn関数もしくはCBLDCMCF('TDCTCN△△'))を発行する。
-
TP1/NET/TCP/IPがキープアライブ,または無通信状態監視で障害を検出する。
コネクションリプレースを使用しない場合の処理の流れを次に示します。
(b) コネクションリプレースを使用する場合
相手システムがTP1/NET/TCP/IPよりも先に障害を検出し,コネクションの再確立を要求した場合,割り当て可能な未確立コネクションがなければ,確立状態の既存のコネクションは切断されます。その後,TP1/NET/TCP/IPは新たなコネクションの確立要求を受け付け,切断したコネクションを再確立します。
コネクションリプレースを使用した場合の処理の流れを次に示します。
- 注※1
-
論理端末が閉塞解除状態の場合に出力されます。
- 注※2
-
論理端末定義(mcftalcle -i)のautoオペランドを指定し,自動的に論理端末を閉塞解除するよう設定している場合に出力されます。
(2) 複数のコネクションを定義した場合のコネクション選択ルール
次の場合,自システムのIPアドレスおよびポート番号が同じコネクションを複数定義できます。
-
ポートフリーのコネクション
コネクション定義(mcftalccn -o)のoportnoオペランドにfreeを指定したコネクション。
-
相手アドレスのチェックを抑止したコネクション
コネクション定義(mcftalccn -h)のaddrchkオペランドにnoを指定を指定したコネクション。
このような複数コネクションに対して,コネクションリプレースを使用できるのは,自システムのIPアドレスおよび自システムのポート番号が同じで,かつそれらすべてのコネクションが確立状態にあるときです。
ポートフリーのコネクションに対してコネクションリプレースを使用する場合,TP1/NET/TCP/IPは自システムのIPアドレスおよびポート番号が同じコネクションの中から,確立状態にあるいちばん古いコネクションをコネクションリプレースの対象として選択します。
(a) ポートフリーのコネクションの場合
ポートフリーのコネクションに対して,コネクションリプレースを使用する場合のコネクション選択ルールを次の図に示します。
(b) 相手アドレスチェックを抑止したコネクションの場合
相手アドレスチェックを抑止したコネクションに対してコネクションリプレースを使用する場合には,TP1/NET/TCP/IPは次の両方の条件と一致する,確立状態にあるいちばん古いコネクションをコネクションリプレースの対象として選択します。
-
接続している既存コネクションの相手アドレスと,確立要求した相手のアドレスが一致
-
自システムのIPアドレスおよびポート番号が同じ
なお,該当するコネクションがない場合,ポートフリーのコネクションの場合と同様に,自システムのIPアドレスおよびポート番号が同じコネクションの中からいちばん古いコネクションをコネクションリプレース対象として選択します。
相手アドレスチェックを抑止したコネクションに対して,コネクションリプレースを使用する場合のコネクション選択ルールを次の図に示します。
(3) コネクション確立UOCを併用する場合
コネクションリプレースとコネクション確立UOCを併用する場合,TP1/NET/TCP/IPがコネクションリプレースを行うコネクションを選択したあと,コネクション確立UOCを呼び出します。コネクション確立UOCには,相手システムのアドレス,ポート番号および自システムのポート番号を通知するので,これらの情報を基に相手システムからの確立要求を受け入れるか,または拒否するかを選択できます。
相手システムからの確立要求を受け入れた場合,コネクション確立UOCを併用しないときと同様に,コネクションリプレースを行います。詳細は,「(1) コネクションリプレースの概要」を参照してください。
コネクション確立要求を受け入れない場合,コネクションリプレースは行いません。また,コネクション確立UOCがエラーリターンした場合,コネクション確立UOCで設定したパラメタが誤っていた場合もコネクションリプレースは行いません。
コネクション確立要求を受け入れない場合の処理の流れを次の図に示します。
(4) コネクションリプレースを使用するときの注意事項
コネクションリプレースを使用するときには,次の点に注意してください。
-
コネクションリプレースは,相手システムのポート番号が固定(コネクション定義(mcftalccn -o)のoportnoオペランドに1〜65535を指定)のサーバ型コネクションには適用されません。ただし,相手システムのポート番号が固定のサーバ型コネクションの場合は,RFC 793の規定によって,相手システムからのコネクション確立要求を契機にして,OSがコネクション障害を検出します。そのため,相手システムのポート番号が固定のサーバ型コネクションはコネクションリプレースを適用しなくても障害回復を行えます。
-
コネクションリプレースを使用する場合,TP1/NET/TCP/IPは選択したコネクションの状態に関係なく,確立状態にある既存のコネクションを切断します。受信処理中のメッセージは破棄し,送信処理中の一方送信メッセージは出力キューに戻ります。また,同期型メッセージの送信関数および同期型メッセージの送受信関数を発行していた場合は,出力先論理端末の停止を示すリターン値またはステータスコードでエラーリターンします。
-
問い合わせ応答形態および継続問い合わせ応答形態のメッセージ送受信機能を使用する場合,継続問い合わせ応答中の論理端末に対応するコネクションをコネクションリプレースの対象とするかどうかをコネクション定義(mcftalccn -l)のcnassignオペランドで指定できます。ただし,継続問い合わせ応答中の論理端末に対応するコネクションをコネクションリプレースの対象とする指定(all)をしても,継続問い合わせ応答が終了するまで該当するコネクションで再確立できません。