Options for the X/Open Transport Interface
 
Options are formatted according to the  t_opthdr structure  as described in "Use of Options
for the X/Open Transport Interface". A transport provider compliant to this specification
supports  none, all, or any subset of the options defined in the following
sections:  "TCP/IP-Level Options" to "IP-level Options". An implementation
may restrict the  use of any of these options by offering them only in the
privileged or read-only  mode.
TCP-Level Options
The protocol level is INET_TCP.
For  this level, the following table shows the options that are defined.
 TCP-Level Options
| Option Name | 
Type of Option Value | 
Legal Option Value | 
Meaning | 
| TCP_KEEPALIVE | 
struct t_kpalive | 
see text following table | 
check if connections are live | 
| TCP_MAXSEG | 
unsigned long | 
length in octets | 
get TCP maximum segment size | 
| TCP_NODELAY | 
unsigned long | 
T_YES T_NO | 
don't delay send to coalesce packets | 
| 
TCP_KEEPALIVE | 
   If set, a keep-alive timer is activated to monitor idle connections
 that may no longer exist. If a connection has been idle since the last  keep-alive
timeout, a keep-alive packet is sent to check if the connection is  still
alive or broken. 
 Keep-alive packets are not an explicit
feature  of TCP, and this practice is not universally accepted. According
to RFC  1122:  
"a keep-alive
mechanism should only be invoked  in server applications that might otherwise
hang indefinitely and consume  resources unnecessarily if a client crashes
or aborts a connection during a  network failure."  
The option value consists of a structure  t_kpalive declared
as:  
struct t_kpalive {
   long kp_onoff;
   long kp_timeout;
} 
The t_kpalive fields
and the possible  values are:  
- 
kp_onoff
 
-   Switches option on or off. Legal values for the field are: 
- 
T_NO
 
-   Switch keep-alive timer off.
 
- 
T_YES
 
-   Activate keep-alive timer.
 
- 
T_YES | T_GARBAGE
 
-   Activate keep-alive timer and send garbage octet.
 
  
Usually, an implementation should send a  keep-alive
packet with no data (T_GARBAGE not set). If T_GARBAGE  is set, the keep-alive packet contains one garbage octet for
compatibility with  erroneous TCP implementations.  
An implementation is, however, not obliged to  support T_GARBAGE (see RFC 1122). Since the kp_onoff value is
an  absolute requirement, the request "T_YES | T_GARBAGE" may therefore be  rejected. 
 
- 
kp_timeout
 
-   Specifies the keep-alive timeout in minutes. This field determines
 the frequency of keep-alive packets being sent, in minutes. The transport
user  can request the default value by setting the field to T_UNSPEC. The  default is implementation-dependent, but at least 120
minutes (see RFC 1122).  Legal values for this field are T_UNSPEC and all positive numbers. 
The timeout
value is not an absolute  requirement. The implementation may pose upper and
lower limits to this value.  Requests that fall short of the lower limit may
be negotiated to the lower  limit.  
The use of this
option might be restricted to  privileged users. 
 
  | 
| 
TCP_MAXSEG | 
  Used to retrieve the maximum TCP segment size. This option is  read-only. | 
| 
TCP_NODELAY | 
  Under most circumstances, TCP sends data as soon as it is presented.
 When outstanding data has not yet been acknowledged, it gathers small amounts
of  output to be sent in a single packet once an acknowledgment is received.
For a  small number of clients, such as window systems (for example, Enhanced
 AIXwindows) that send a stream of mouse events which receive no
replies, this  packetization may cause significant delays. TCP_NODELAY is used to defeat  this algorithm. Legal option values are: 
- 
T_YES
 
-   Do not delay.
 
- 
T_NO
 
-   Delay.
 
  | 
These options are not association-related. The  options
may be negotiated in all X/Open Transport Interface states except T_UNBIND and  T_UNINIT. The options are read-only in the T_UNBIND state. See  "The Use of Options
for the X/Open Transport Interface" for the differences between  association-related
options and those options that are not.
Absolute Requirements
A request for TCP_NODELAY and
a  request to activate TCP_KEEPALIVE is an absolute
requirement.  TCP_MAXSEG is a read-only option.
UDP-level Options
The protocol level is INET_UDP.
The  option defined for this level is shown in the following table.
 UDP-Level  Options
| Option Name | 
Type of Option Value | 
Legal Option Value | 
Meaning | 
| UDP_CHECKSUM | 
unsigned long | 
T_YES/T_NO | 
checksum computation | 
| 
UDP_CHECKSUM | 
  Allows disabling and enabling of the UDP checksum computation. The
 legal values are: 
- 
T_YES
 
-   Checksum enabled.
 
- 
T_NO
 
-   Checksum disabled.
 
  
This option is association-related. It may be
 negotiated in all XTI states except T_UNBIND and T_UNINIT. It is  read-only in state T_UNBND.  
If this option is returned with the  t_rcvudata subroutine, its value indicates whether a checksum
was present  in the received datagram or not.  
Numerous cases of undetected errors have been  reported when applications
chose to turn off checksums for efficiency. The  advisability of ever turning
off the checksum check is very controversial.  | 
Absolute Requirements
A request for this option is an absolute  requirement.
IP-level Options
The protocol level is INET_IP.
The  options defined for this level are listed in the following table.
 IP-Level  Options
| Option Name | 
Type of Option Value | 
Legal Option Value | 
Meaning | 
| IP_BROADCAST | 
unsigned int | 
T_YES/T_NO | 
permit sending of broadcast messages | 
| IP_DONTROUTE | 
unsigned int | 
T_YES/T_NO | 
just use interface addresses | 
| IP_OPTIONS | 
array of unsigned characters | 
see text | 
IP per-packet options | 
| IP_REUSEADDR | 
unsigned int | 
T_YES/T_NO | 
allow local address reuse | 
| IP_TOS | 
unsigned char | 
see text | 
IP per-packet type of service | 
| IP_TTL | 
unsigned char | 
time in seconds | 
IP per packet time-to-live | 
| 
IF_BROADCAST | 
  Requests permission to send broadcast datagrams. It was defined to
 make sure that broadcasts are not generated by mistake. The use of this option
 is often restricted to privileged users. | 
| 
IP_DONTROUTE | 
  Indicates that outgoing messages should bypass the standard routing
 facilities. It is mainly used for testing and development. | 
| 
IP_OPTIONS | 
  Sets or retrieves the OPTIONS field of each outgoing (incoming) IP
 datagram. Its value is a string of octets composed of a number of IP options,
 whose format matches those defined in the IP specification with one exception:
 the list of addresses for the source routing options must include the first-hop
 gateway at the beginning of the list of gateways. The first-hop gateway address
 will be extracted from the option list and the size adjusted accordingly
before  use. 
 The option is disabled if it is specified
with  "no value," for example, with an option header only.  
The t_connect (in synchronous mode),  t_listen, t_rcvconnect and t_rcvudata subroutines return  the OPTIONS field, if any, of the received IP datagram
associated with this  call. The t_rcvuderr subroutine
returns the OPTIONS field of the data  unit previously sent that produced
the error. The t_optmgmt subroutine  with T_CURRENT set retrieves the currently effective IP_OPTIONS  that is sent with outgoing datagrams.  
Common
applications never need this option. It  is mainly used for network debugging
and control purposes.  | 
| 
IP_REUSEADDR | 
  Many TCP implementations do not allow the user to bind more than
one  transport endpoint to addresses with identical port numbers. If  IP_REUSEADDR is set to T_YES this
restriction is relaxed in the  sense that it is now allowed to bind a transport
endpoint to an address with a  port number and an underspecified internet
address ("wild card" address) and  further endpoints to addresses with the
same port number and (mutually  exclusive) fully specified internet addresses. | 
| 
IP_TOS | 
  Sets or retrieves the type-of-service field
of an outgoing  (incoming) IP datagram. This field can be constructed by any
OR'ed combination  of one of the precedence flags and the type-of-service
flags T_LDELAY,  T_HITHRPT, and T_HIREL: 
- 
Precedence: 
These flags specify
datagram precedence,  allowing senders to indicate the importance of each
datagram. They are intended  for Department of Defense applications. Legal
flags are:  
T_ROUTINE
T_PRIORITY
T_IMMEDIATE
T_FLASH
T_OVERRIDEFLASH
T_CRITIC_ECP
T_INETCONTROL
T_NETCONTROL  Applications using IP_TOS but not
the precedence level should use the  value T_ROUTINE for
precedence.  
- 
Type of service: 
These flags
specify the type of service the IP  datagram desires. Legal flags are:  
- T_NOTOS
 
- requests no distinguished type of service
 
- T_LDELAY
 
- requests low delay
 
- T_HITHRPT
 
- requests high throughput
 
- T_HIREL
 
- requests high reliability
 
  The option value is set using the macro SET_TOS(prec, tos) where prec is set to one of the precedence flags and tos to  one or an OR'ed combination of the type-of-service flags. SET_TOS returns  the option value. 
The t_connect, t_listen,  t_rcvconnect and t_rcvudata subroutines return the  type-of-service field of the received IP datagram associated with this
 call. The t_rcvuderr subroutine returns the type-of-service field  of the data unit previously sent that produced
the error.  
The t_optmgmt subroutine
with  T_CURRENT set retrieves the currently effective IP_TOS value that  is sent with outgoing datagrams.  
The requested type-of-service cannot
be  guaranteed. It is a hint to the routing algorithm that helps it choose
among  various paths to a destination. Note also, that most hosts and gateways
in the  Internet these days ignore the type-of-service field.    | 
| 
IP_TIL | 
  This option is used to set the time-to-live field
in an  outgoing IP datagram. It specifies how long, in seconds, the datagram
is allowed  to remain in the Internet. The time-to-live field of an incoming datagram  is not returned by any function (since
it is not an association-related  option). | 
IP_OPTIONS and IP_TOS are both  association-related options. All other options are not
association-related.
IP_REUSEADDR may be negotiated
in all  XTI states except T_UNINIT. All other options
may be negotiated in all  other XTI states except T_UNBND and T_UNINIT; they are read-only  in the state T_UNBND.
Absolute Requirements
A request for any of these options in an  absolute
requirement.
[ Top of Page | Previous Page | Next Page | Index | Feedback ]