In z/OS® Communications Server, you can configure multiple TCP/IP stacks in a single MVS™ image using the CINET feature. In a CINET configuration, an application using the z/OS UNIX socket interface can get transparent access to all the TCP/IP protocol stacks configured under CINET. For example, when an application coded to z/OS UNIX sockets performs a SOCKET/BIND/LISTEN in a CINET environment, the request is propagated by CINET to all the TCP/IP stacks. This application can then service client requests that arrive into any of the configured TCP/IP stacks without having any awareness of this fact. This type of application is often referred to as a generic server or daemon.
The following servers or daemons shipped by z/OS Communications Server are generic:
z/OS UNIX RSHD, REXECD and TELNETD are usually started by the INETD daemon, which is shipped as part of the z/OS UNIX. Because INETD is also a generic daemon, any server processes started by INETD inherently become generic servers as well.
If a server started by INETD (a generic server) requires affinity to a specific stack, this affinity can be accomplished by use of the _BPXK_SETIBMOPT_TRANSPORT environment variable. For more information about the _BPXK_SETIBMOPT_TRANSPORT environment variable, see z/OS UNIX System Services Planning.
The _BPXK_SETIBMOPT_TRANSPORT environment variable, when set, has an effect similar to the setibmopt() function call provided by the XL C/C++ compiler and described in the z/OS XL C/C++ Runtime Library Reference. This variable can be set in the JCL for a started procedure or batch job that executes a z/OS UNIX C/C++ program to indicate which TCP/IP stack instance the application should bind to. TCP/IP applications that require affinity to a specific TCP/IP stack, like OSNMPD and OMPROUTE, use the setibmopt() function call directly. The _BPXK_SETIBMOPT_TRANSPORT environment variable basically provides the ability to bind a generic server type of application to a specific stack.
//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
All the parameters specified prior to the slash (/) in the parameter statement are processed by the XL C/C++ run-time library. Parameters to be passed to the FTPD program must appear after the slash (/). Also note how the parameters were split over three lines in this example because they could not fit on a single line.
//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)
_BPXK_SETIBMOPT_TRANSPORT=TCPIPOE
In these examples, INETD was also passed its configuration file as a parameter. In our examples, this file is an MVS data set rather than a z/OS UNIX file; therefore, it requires the additional double slash (//) and quotes that the example shows.
If specified for a non-generic server and/or non-z/OS UNIX application it will not have any effect.
EDC8011I A name of a PFS was specified that either is
not configured or is not a Sockets PFS.
EDC5112I Resource temporarily unavailable.