t_sndvudata - Send a data unit from one or more non-contiguous
buffers
#include <xti.h>
int t_sndvudata(
int fd,
struct t_unitdata *unitdata,
struct t_iovec *iov,
unsigned int iovcount );
XTI Library (libxti.a)
Interfaces documented on this reference page conform to
industry standards as follows:
t_sndvudata(): XNS5.0
Refer to the standards(5) reference page for more information
about industry standards and associated tags.
The following table summarizes the relevance of input and
output parameters before and after t_sndvudata() is
called:
---------------------------------------------------
Parameters Before Call After Call
---------------------------------------------------
fd y n
unitdata->addr.maxlen n e
unitdata->addr.len y e
unitdata->addr.buf y(y) e(e)
unitdata->opt.maxlen n e
unitdata->opt.len y e
unitdata->opt.buf o(o) e(e)
unitdata->udata.maxlen n e
unitdata->udata.len n e
unitdata->udata.buf n e
iov[0].iov_base y(y) e(e)
iov[0].iov_len y e
...
iov[iov- y(y) e(e)
count-1].iov_base
iov[iovcount-1].iov_len y e
iovcount y n
---------------------------------------------------
Notes to Table: This is a meaningful parameter. The content
of the object pointed to by y is meaningful. This is
a meaningful but optional parameter. The content of the
object pointed to by o is meaningful. The parameter value
after the call is the same as before the call. The content
of the object pointed to by e is the same as before
the call. This is not a meaningful parameter. Identifies
the local transport endpoint through which data is sent.
Points to a type t_unitdata structure used to specify a
data unit being sent through the transport endpoint
specified by the fd parameter. The t_unitdata structure
has the following members: References a buffer for protocol
address information of the remote transport user. The
type netbuf structure referenced by this member is defined
in the xti.h include file and has the following members:
Specifies a maximum byte length of the data buffer. Specifies
the actual byte length of the data written to the
buffer. Points to the buffer location. Identifies
options that the user wants associated with this request.
The user may choose not to specify what protocol options
are associated with the transfer by setting the len field
of opt to zero. In this case, the provider may use default
options. Specifies the user data unit that is being sent
to the remote transport user. (Not used) Points to the
data to be sent. Contains the number of non-contiguous
udata buffers, which is limited to T_IOV_MAX (16).
The t_sndvudata() function is an XTI connectionless service
The data to be sent is identified by iov[0] through
iov[iovcount-1].
Note
The limit on the total number of bytes available in all
buffers passed (that is, iov(0).iov_len + ... + iov(iovcount-1).iov_len)
may be constrained by implementation
limits. If no other constraint applies, it will be limited
by [INT_MAX]. In practice, the availability of memory
to an application is likely to impose a lower limit on
the amount of data that can be sent or received using
scatter/gather functions.
By default, t_sndvudata() operates in synchronous mode and
waits if flow control restrictions prevent the data from
being accepted by the local transport provider at the time
of the call. However, if O_NONBLOCK is set (via t_open()
or fcntl()), t_sndvudata() executes in asynchronous mode
and fails under such conditions. The process can arrange
to be notified of the clearance of a flow control restriction
via either t_look() or the EM interface.
If the amount of data specified in iov[0] through iov[iovcount-1]
exceeds the TSDU size as returned in the tsdu
field of the info argument of t_open() or t_getinfo(), or
is zero and sending of zero octets is not supported by the
underlying transport service, a [TBADDATA] error is generated.
If t_sndvudata() is called before the destination
user has activated its transport endpoint (see t_bind(3)),
the data unit may be discarded.
If the transport provider cannot immediately detect the
conditions that cause the [TBADDADDR] and [TBADOPT]
errors, these errors will alternatively be returned by
t_rcvuderr(). An application must therefore be prepared
to receive these errors in both of these ways.
If the t_sndvudata() function fails, t_errno may be set to
one of the following values: The specified protocol
address was in an incorrect format or contained illegal
information. An attempt to send once, specifying a TSDU
(ETSDU) greater than that specified by the current value
in the info argument, or an attempt to send zero-byte TSDU
(ETSDU) is not supported by the provider.
The iovcount parameter is greater than T_IOV_MAX.
File descriptor (fd) is not a valid transport endpoint.
The specified options were in an incorrect
format or contained illegal information. Asynchronous
mode is indicated because O_NONBLOCK was
set, but the transport provider cannot accept the
data because of flow-control restrictions. An
asynchronous event occurred on this transport endpoint
and requires immediate attention. This function
is not supported by the underlying transport
provider. The communications endpoint referenced
by fd is not in a valid state in which a call to
this function. A communication problem has been
detected between XTI and the transport provider for
which there is no other suitable XTI error
(t_errno). A system error occurred during execution
of this function.
The t_sndvudata() function can be called only in the
T_IDLE transport provider state.
Upon successful completion, t_sndvudata() returns a value
of 0 (zero). Otherwise, it returns a value of -1 and sets
t_errno to indicate the error.
Functions: fcntl(2), t_alloc(3), t_open(3), t_rcvudata(3),
t_rcvuderr(3), t_rcvvudata(3), t_sndudata(3).
Standards: standards(5)
Network Programmer's Guide
t_sndvudata(3)
[ Back ] |