CINET 環境の一般サーバー

z/OS® Communications Server では、CINET 機能を使用して、複数の TCP/IP スタックを単一の MVS™ イメージに構成できます。CINET 構成では、z/OS UNIX ソケット・インターフェースを使用するアプリケーションは、CINET のもとで構成されたすべての TCP/IP プロトコル・スタックへの透過的なアクセスが取得できます。例えば、 z/OS UNIX ソケットに対してコーディングされたアプリケーションが CINET 環境で、SOCKET/BIND/LISTEN を実行すると、 その要求は CINET によってすべての TCP/IP スタックに伝えられます。これによって、このアプリケーションは、構成された いずれの TCP/IP スタックに到着したクライアント要求に対しても、その事実を認識せずに サービスすることができます。このタイプのアプリケーションは、しばしば、一般サーバー またはデーモン と呼ばれます。

z/OS Communications Server で出荷される次のサーバーまたはデーモンは、一般です。

z/OS UNIX RSHD、REXECD、および TELNETD は、通常、INETD デーモンによって開始され、このデーモンは、z/OS UNIX の一部として出荷されています。INETD もまた一般デーモンであるため、INETD によって開始されるサーバー・プロセスもすべて同様に、一般サーバーになります。

INETD (一般サーバー) により開始されたサーバーが 特定のスタックへのアフィニティーを必要とする場合、このアフィニティーは _BPXK_SETIBMOPT_TRANSPORT 環境変数を使用することにより達成されます。_BPXK_SETIBMOPT_TRANSPORT 環境変数について詳しくは、「z/OS UNIX System Services 計画」を参照してください。

_BPXK_SETIBMOPT_TRANSPORT 環境変数が設定されると、XL C/C++ コンパイラーで提供されている setibmopt() 関数呼び出しと似たような効果があります。この関数呼び出しについては、「z/OS XL C/C++ ランタイム・ライブラリー・リファレンス」に記述されています。この変数は、z/OS UNIX C/C++ プログラムを実行する開始プロシージャーまたはバッチ・ジョブの JCL に設定して、アプリケーションがバインドする必要のある TCP/IP スタック・インスタンスを示すことができます。OSNMPD および OMPROUTE のような、特定の TCP/IP スタックに対するアフィニティーを必要とする TCP/IP アプリケーションは、setibmopt() 関数呼び出しを使用します。BPXK_SETIBMOPT_TRANSPORT 環境変数は、基本的には、アプリケーションの一般サーバー・タイプを特定のスタックにバインドする機能を備えています。

例えば、1 つは TCPIP でもう 1 つは TCPIPOE という名前の、2 つの TCP/IP スタックが CINET の下で構成されており、TCPIPOE に関連した FTPD サーバー・インスタンスを開始させたい場合、FTPD プロシージャーを変更して、_BPXK_SETIBMOPT_TRANSPORT 環境変数を以下のように設定できます。
//FTPD   PROC MODULE='FTPD',PARMS='TRACE'
//FTPD   EXEC PGM=&MODULE,REGION=7M,TIME=NOLIMIT,
//       PARM=('POSIX(ON) ALL31(ON)',
//      'ENVAR("_BPXK_SETIBMOPT_TRANSPORT=TCPIPOE")',
//      '/&PARMS')
//CEEDUMP  DD SYSOUT=*
//SYSFTSX DD DISP=SHR,DSN=TCPV34.STANDARD.TCPXLBIN

パラメーター・ステートメントで、スラッシュ (/) の前に指定されたパラメーターは、すべて XL C/C++ ランタイム・ライブラリーによって 処理されます。FTPD プログラムに 渡すパラメーターは、スラッシュ (/) の後になければなりません。 また、この例では、パラメーターが 1 行には入りきらないため、3 行にまたがって分割 されていることにも注意してください。

次の例は、INETD の開始プロシージャーの JCL を使用しています。
//INETD  PROC
//************************************************************
//INETD  EXEC PGM=BPXBATCH,
//*      PARM='PGM /usr/sbin/inetd -d /etc/inetd.conf'
//       PARM='PGM /usr/sbin/inetd    //''USER1.INETD.CONF'''
//*      PARM='PGM /usr/sbin/inetd    //''SYS1.TCPPARMS(INETDCNF)'''
//*
//STDERR  DD PATH='/tmp/inetd.debug.stderr',
//  PATHOPTS=(OWRONLY,OCREAT,OTRUNC),
//  PATHMODE=SIRWXU
//STDOUT  DD PATH='/tmp/inetd.debug.stdout',
//  PATHOPTS=(OWRONLY,OCREAT,OTRUNC),
//  PATHMODE=SIRWXU
//STDENV   DD  DISP=SHR,DSN=USER1.INETD.ENVIRON
//*STDENV   DD  DISP=SHR,DSN=SYS1.TCPPARMS(INETDENV)
STDENV データ・セットには、以下に示すように、_BPX_SETIBMOPT_TRANSPORT 変数が含まれます。
_BPXK_SETIBMOPT_TRANSPORT=TCPIPOE                 
 

これらの例では、INETD もその構成ファイルをパラメーターとして渡されています。この例では、このファイルは z/OS UNIX ファイルではなく、MVS データ・セットであるため、例で示しているように、追加のダブルスラッシュ (//) と引用符が必要です。

それぞれのインスタンスが別々の TCP/IP スタックにバインドされている場合でも、INETD の複数インスタンスは許可されません。 これは INETD の制限であり、TCP/IP の制限ではありません。したがって、INETD に特定のスタックに対してアフィニティーを持たせる場合は、MVS イメージのもとで実行させることができるのは、その INETD インスタンスのみになります。
注:
  1. _BPXK_SETIBMOPT_TRANSPORT 変数は、アプリケーションの一般サーバー・タイプについてのみ指定すべきです。

    一般サーバー以外のサーバーや z/OS UNIX 以外 のアプリケーション、またはその両方に関して指定しても、効果はまったくありません。

  2. _BPXK_SETIBMOPT_TRANSPORT で指定する名前は、TCP/IP スタックに関連したジョブ名と一致している必要があります。
    指定された名前が CINET に関して定義されたどの TCP/IP スタックのジョブ名にも一致しない場合は、アプリケーションは、z/OS UNIX 戻りコード X'3F3' とリターン値 X'005A' を受信し、次のメッセージを伴う場合もあります。
    EDC8011I A name of a PFS was specified that either is 
    not configured or is not a Sockets PFS.
    指定された名前が CINET のもとで定義された現在アクティブのどの TCP/IP スタックのジョブ名にも一致しない場合は、アプリケーションは、z/OS UNIX 戻りコード X'70' とリターン値 X'0296' を受信し、次のメッセージを伴う場合もあります。
    EDC5112I Resource temporarily unavailable.
  3. トランスポート・アフィニティーの要求についての詳細は、「z/OS UNIX System Services 計画」を参照してください。