Manage options for a transport endpoint.
X/Open Transport Interface Library (libxti.a)
#include <xti.h>
int t_optmgmt(
int fd,
const struct t_optmgmt *req,
struct t_optmgmt *ret)
The t_optmgmt subroutine enables a transport user to retrieve, verify, or negotiate protocol options with the transport provider.
The req and ret parameters both point to a t_optmgmt structure containing the following members:
struct netbuf opt;
long flags;
Within this structure, the fields have the following meaning:
Field | Description |
---|---|
opt | Identifies protocol options. The options are represented
by a netbuf structure in a manner similar to the address in
the t_bind subroutine:
|
flags | Specifies the action to take with those options. The flags field
of req must specify one of the following actions:
|
|
|
|
|
The T_ALLOPT option can only be used with the t_optmgmt structure and the actions T_NEGOTIATE, T_DEFAULT and T_CURRENT. This option can be used with any supported level and addresses all supported options of this level. The option has no value and consists of a t_opthdr only. Since only options of one level may be addressed in a t_optmgmt call, this option should not be requested together with other options. The subroutine returns as soon as this option has been processed. Options are independently processed in the order they appear in the input option buffer. If an option is multiply input, it depends on the implementation whether it is multiply output or whether it is returned only once. Transport providers may not be able to provide an interface capable of supporting T_NEGOTIATE and/or T_CHECK functionalities. When this is the case, the error TNOTSUPPORT is returned. The subroutine t_optmgmt may block under various circumstances and depending on the implementation. For example, the subroutine will block if the protocol addressed by the call resides on a separate controller. It may also block due to flow control constraints, if data previously sent across this transport endpoint has not yet been fully processed. If the subroutine is interrupted by a signal, the option negotiations that have been done so far may remain valid. The behavior of the subroutine is not changed if O_NONBLOCK is set. |
Item | Description |
---|---|
fd | Identifies a transport endpoint. |
req | Requests a specific action of the provider. |
ret | Returns options and flag values to the user. |
X/Open Transport Interface (XTI) level options are not specific for a particular transport provider. An XTI implementation supports none, all, or any subset of the options defined below. An implementation may restrict the use of any of these options by offering them only in the privileged or read-only mode, or if the bound transport endpoint identified by the fd parameter relates to specific transport providers.
The subsequent options are not association-related (see Chapter 5, The Use of Options) . They may be negotiated in all XTI states except T_UNINIT.
The protocol level is XTI_GENERIC. For this level, the following options are defined (the type of each option value is of type unsigned long unless otherwise indicated):
Option Name | Legal Option Value | Meaning |
---|---|---|
XTI_DEBUG (array of unsigned longs) | see text | enable debugging |
XTI_LINGER (struct linger) | see text | linger on close if data is present |
XTI_RCVBUF | size in octets | receive buffer size |
XTI_RCVLOWAT | size in octets | receive low-water mark |
XTI_SNDBUF0 | size in octets | send buffer size |
XTI_SNDLOWAT | size in octets | send low-water mark |
A request for XTI_DEBUG is an absolute requirement. A request to activate XTI_LINGER is an absolute requirement; the timeout value to this option is not. XTI_RCVBUF, XTI_RCVLOWAT, XTI_SNDBUF and XTI_SNDLOWAT are not absolute requirements.
Option | Description |
---|---|
XTI_DEBUG | Enables debugging. The values of this option are implementation-defined.
Debugging is disabled if the option is specified with no value (for
example, with an option header only). The system supplies utilities to process the traces. An implementation may also provide other means for debugging. |
XTI_LINGER | Lingers the execution of a t_close subroutine or the close exec
if send data is still queued in the send buffer. The option value
specifies the linger period. If a close exec or t_close subroutine
is issued and the send buffer is not empty, the system attempts to
send the pending data within the linger period before closing the
endpoint. Data still pending after the linger period has elapsed is
discarded. Depending on the implementation, the t_close subroutine or close exec either, at a maximum, block the linger period, or immediately return, whereupon, at most, the system holds the connection in existence for the linger period. The option value consists of a structure t_linger declared as:
The fields of the structure and the legal values are:
Note: Note that this option does not linger the execution
of the t_snddis subroutine.
|
XTI_RCVBUF | Adjusts the internal buffer size allocated for the receive
buffer. The buffer size may be increased for high-volume connections,
or decreased to limit the possible backlog of incoming data. This request is not an absolute requirement. The implementation may place upper and lower limits on the option value. Requests that fall short of the lower limit are negotiated to the lower limit. Legal values are all positive numbers. |
XTI_RCVLOWAT | Sets a low-water mark in the receive buffer. The option value
gives the minimal number of bytes that must have accumulated in the
receive buffer before they become visible to the transport user. If
and when the amount of accumulated receive data exceeds the low-water
mark, a T_DATA event is created, an event mechanism (for example,
the poll or select subroutines) indicates the data,
and the data can be read by the t_rcv or t_rcvudata subroutines.
This request is not an absolute requirement. The implementation may place upper and lower limits on the option value. Requests that fall short of the lower limit are negotiated to the lower limit. Legal values are all positive numbers. |
XTI_SNDBUF | Adjusts the internal buffer size allocated for the send buffer.
This request is not an absolute requirement. The implementation may place upper and lower limits on the option value. Requests that fall short of the lower limit are negotiated to the lower limit. Legal values are all positive numbers. |
XTI_SNDLOWAT | Sets a low-water mark in the send buffer. The option value
gives the minimal number of bytes that must have accumulated in the
send buffer before they are sent. This request is not an absolute requirement. The implementation may place upper and lower limits on the option value. Requests that fall short of the lower limit are negotiated to the lower limit. Legal values are all positive numbers. |
ALL - except from T_UNINIT.
Item | Description |
---|---|
0 | Successful completion. |
-1 | t_errno is set to indicate an error. |
On failure, t_errno is set to one of the following:
Value | Description |
---|---|
TACCES | The user does not have permission to negotiate the specified options. |
TBADF | The specified file descriptor does not refer to a transport endpoint. |
TBADFLAG | An invalid flag was specified. |
TBADOPT | The specified options were in an incorrect format or contained illegal information. |
TBUFOVFLW | The number of bytes allowed for an incoming argument (maxlen) is greater than 0 but not sufficient to store the value of that argument. The information to be returned in ret will be discarded. |
TOUTSTATE | The subroutine was issued in the wrong sequence. |
TPROTO | This error indicates that a communication problem has been detected between the X/Open Transport Interface and the transport provider for which there is no other suitable X/Open Transport Interface (t_errno). |
TSYSERR | A system error has occurred during execution of this subroutine. |