Note that applications can set and override the keep-alive values.
We just spent 6 months resolving a problem with keep-alive timeouts and
it turned out that an application running on a Windows server was
setting the values and overriding TCP/IP and firewall settings (another
place where they set keep-alive). Mainframe applications can also set
the value.

-----Original Message-----
From: IBM Mainframe Discussion List [mailto:ibm-m...@bama.ua.edu] On
Behalf Of Chris Mason
Sent: Tuesday, June 02, 2009 7:32 AM
To: IBM-MAIN@bama.ua.edu
Subject: Re: TCPIP Default keep alive question

Vic

The best list to use for questions concerning the Communications Server
IP 
component (even the Communications Server SNA component given that 
Enterprise Extender is so often the subject) is the IBMTCP-L list:

For IBMTCP-L subscribe / signoff / archive access instructions,
send email to lists...@vm.marist.edu with the message: INFO IBMTCP-L

-

Your precise answer is at the end of the post.

If there were such an API, it would be one of the options of either the 
getsockopt() call or the getibmsockopt() call and the equivalent in
languages 
other than C.

You may be aware that the matter of TCP keep-alive is not quite as 
straightforward as it might be. To be sure I cover the topic correctly -
as best 
I can - I'll quote what is said in the CS IP Configuration Reference
regarding 
the value in which you are interested, the one that shows up in the
NETSTAT 
CONFIG output as DefaultKeepALive specified by the PROFILE TCPCONFIG 
statement INTERVAL parameter:

<quote>

INTERVAL default_keepalive_interval

The default TCP keepalive interval for applications that enable the 
SO_KEEPALIVE socket option and do not override the interval using the 
TCP_KEEPALIVE socket option. The range is 0 - 35 791 minutes, and the 
default is 120. A value of 0 disables the keepalive function, so that
sockets 
for which SO_KEEPALIVE is specified do not perform TCP keepalive. In
this 
case, sockets specifying a specific interval using TCP_KEEPALIVE
continue to 
send keepalive probes.

TCP keepalive probes end TCP connections after a period of inactivity.
TCP 
keepalive is disabled by default for a connection, but can be enabled by

issuing the SO_KEEPALIVE or TCP_KEEPALIVE socket options. The 
TCP_KEEPALIVE socket option enables the application to specify the
keepalive 
probe interval, while the SO_KEEPALIVE socket option uses 
default_keepalive_interval as the interval.

After the interval has expired, TCP sends a single keepalive probe to
the peer. 
If the TCP_KEEPALIVE socket option is not used to specify the probe
interval, 
a total of ten probes are then sent at 75-second intervals if no
response is 
received from the peer. If no response has been received 75 seconds
after 
the last probe, the connection is reset. If TCP_KEEPALIVE is used to
specify 
the keepalive probe interval, the number of probes and the interval
between 
the probes might differ depending on the interval specified.

</quote>

It was only after I read the last sentence that I realised the topic was
even 
more complicated than I had initially supposed!

OK, INTERVAL sets a node-wide "keepalive" interval for those TCP sockets

which have decided to call upon the "keepalive" service by requesting it
by 
means of the setsockopt() SO_KEEPALIVE option. The default is for the 
service to be disabled. The value of the SO_KEEPALIVE option can be
obtained 
by means of the getsockopt() call.

Note that, even if the program requests that the service is enabled, it
can 
effectively be disabled on a node-wide basis, by setting "0" as the
value for 
the INTERVAL parameter.

But there is also the TCP_KEEPALIVE option of the setsockopt() and 
getsockopt() calls. This requests the service and sets a value for the
interval. 
Moreover it sets up a regime for conducting the keepalive testing should
it be 
called upon - that's the unexpected complication in that last sentence!

<quote>

TCP_KEEPALIVE

Use this option to set or determine whether a socket-specific timeout
value 
(in seconds) is to be used in place of a configuration-specific value
whenever 
keep alive timing is active for that socket. When activated, the socket-
specified timer value remains in effect until respecified by SETSOCKOPT
or 
until the socket is closed. See the z/OS Communications Server: IP 
Programmer's Guide and Reference for more information about the socket 
option parameters.  

</quote>

The "configuration-specific value" is the value of the INTERVAL
parameter 
when the service is enabled using the SO_KEEPALIVE option rather than
the 
TCP_KEEPALIVE option.

For reasons best known to the manual authors the section you need now to

consult for the specifics of how the TCP_KEEPALIVE option works is
tucked 
away as the last section of the last chapter of the CS IP Programmer's
Guide 
and Reference manual!

When you have read this section you may decide that the TCP_KEEPALIVE 
option better satisfies your needs that the mechanism associated with
the 
PROFILE TCPCONFIG statement INTERVAL parameter and the SO_KEEPALIVE 
option.

-

Finally, to answer your question, I am not aware of an easy-to-use API
which 
yields the value configured on the PROFILE TCPCONFIG statement INTERVAL 
parameter. It is possible to extract the value as an SNMP manager
accessing 
the MIB variable ibmMvsTcpKeepAliveTimer, 1.3.6.1.4.1.2.6.19.2.2.2.4. If

there's an easier way, I hope someone will jump in with the answer. I
suspect 
some technique able to extract the value from the output of the NETSTAT 
CONFIG output might be the easiest.

Chris Mason

On Mon, 1 Jun 2009 12:16:28 -0500, Vic Petrone <v...@bell.net> wrote:

>Is there a programming interface to extract the DefaultKeepALive value
that 
is
>stored the TCP Configuration Table?
>
>This is the same value that the TSO NETSTAT CONFIG command displays.
>
>Thanks,
>Vic

----------------------------------------------------------------------
For IBM-MAIN subscribe / signoff / archive access instructions,
send email to lists...@bama.ua.edu with the message: GET IBM-MAIN INFO
Search the archives at http://bama.ua.edu/archives/ibm-main.html

----------------------------------------------------------------------
For IBM-MAIN subscribe / signoff / archive access instructions,
send email to lists...@bama.ua.edu with the message: GET IBM-MAIN INFO
Search the archives at http://bama.ua.edu/archives/ibm-main.html

Reply via email to