home *** CD-ROM | disk | FTP | other *** search
- NEW API SUPPORT FOR SETTING THE TCP KEEP ALIVE TIMER
- ----------------------------------------------------
-
- This file describes the use of the new options in the BSD Socket API
- that were added to TCPIP.NLM versions 2.02L. This document is for
- NLM developers only; there is no user information herein.
-
- Please note that you should be using version 2.02L of the TCPIP.NLM
- found in the file TCP187.EXE in order for these options work.
- TCP187.EXE is available from NOVLIB 8 on CompuServe. Installation
- instruction are also included in that file and they should be followed
- before attempting to use these new options.
-
- KeepAlive Option using the BSD Socket API
- -----------------------------------------
-
- Applications using the BSD Socket application programming interface
- can toggle the use of the TCP KeepAlive timer and set the timer
- value using the setsockopt function.
-
- By default, TCPIP.NLM does not send KeepAlives on connections
- using the BSD Socket API.
-
- setsockopt
- The setsockopt function establishes the parameters for
- socket operation.
-
- Syntax
- #include <sys/types.h>
- #include <sys/socket.h>
-
- setsockopt( int s, int level, int optname, char *optval,
- int optlen);
-
- s (Input) Identifies the socket file handle of a
- socket for which parameters are to be established.
-
- level (Input) SOL_SOCKET
-
- optname (Input) SO_KEEPALIVE
-
- optval (Input) Points to an option value. The SO_KEEPALIVE
- option value is an integer indicating the time-out
- value in minutes. If the value is zero, the KeepAlive
- timer is disabled. If the value is between 1 and 4,
- inclusive, the timeout value is set to two hours.
-
- Formerly this value was used only to toggle KeepAlive
- on (value != 0) or off (optval == 0).
-
- KeepAlive Option using the TLI API
-
- Applications using the TLI application programming interface can
- toggle the use of the TCP KeepAlive timer and set the timer value
- using the t_optmgmt function.
-
- By default, TCPIP.NLM sends KeepAlives at 2 hour intervals on connections
- using the TLI API. Previous versions of TCP for NetWare did not support
- the t_optmgmt function.
-
- Syntax
- #include <tiuser.h>
- int t_optmgmt ( int fh, struct t_optmgmt *req,
- struct t_optmgmt *ret )
-
- fh (Input) Identifies a bound transport endpoint.
-
- req (Input) Points to a structure containing protocol
- options.
-
- ret (Output) Receives the options and flag values.
-
- Remarks
- The req and ret arguments point to a t_optmgmt structure
- containing the following members:
-
- struct netbuf opt;
- long flags;
-
- The opt field identifies protocol options and the flags
- field specifies the action to take with those options.
- The T_NEGOTIATE flag must be set to change the KeepAlive
- timer. The T_CHECK and T_DEFAULT flags are not supported.
-
- The netbuf structure contains the following members:
- unsigned int maxlen;
- unsigned int len;
- char *buf;
-
- maxlen (Input) Has no meaning for the req argument.
-
- (Output) Specifies the maximum size of the
- options buffer.
-
- len (Input) Specifies the number of bytes in the options
-
- (Output) Specifies the number of bytes returned.
-
- buf (Input) Points to the options buffer. See t_opthdr
- defined below.
-
- (Output) Points to the buffer where the options are
- to be placed. see t_opthdr defined below.
-
-
- The following structures must be defined by the application.
-
- The t_opthdr structure defines the option to be negotiated and
- should be equivalent to the structure shown:
-
- struct t_opthdr
- {
- unsigned long len;
- unsigned long level;
- unsigned long name;
- unsigned long status;
- struct t_kpalive kp_val;
- };
-
- len length of t_opthdr
-
- level INET_TCP
-
- The following define is required:
- #define INET_TCP 0x06
-
- name TCP_KEEPALIVE
-
- The following define is required:
- #define TCP_KEEPALIVE 0x08
-
- status T_SUCCESS or T_FAILURE indicates the status of
- the negotiation.
-
- kp_val The t_kpalive structure defines the state of the
- KeepAlive timer, and the timer interval.
- It should be equivalent to the structure shown:
-
-
- struct t_kpalive {
- long kp_onoff;
- long kp_timeout;
- }
- kp_onoff 0 - disable KeepAlives
- 1 - enable KeepAlives
-
- kp_timeout The timer value in minutes. If the
- value is less than 5, the timeout value
- is set to two hours.
-
- TCP/IP's Behavior
-
- Once the KeepAlive timer expires TCP/IP will send a KeepAlive packet to
- the TCP peer. If the TCP peer responds, the timer will be reset. If
- the TCP peer does not respond within the current estimate of the
- connection's round trip time, TCP/IP will retransmit the KeepAlive packet.
- TCP/IP will retry according to its standard retry algorithm. An exponential
- backoff algorithm is used to calculate an increasing round trip time estimate
- for each retry. This means that after the KeepAlive timer has expired, the
- connection will not be closed until TCP/IP has exhausted its normal
- retries.