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 ]