t_snd(3N) NETWORK FUNCTIONS t_snd(3N)
NAME
tsnd - send data or expedited data over a connection
SYNOPSIS
#include <tiuser.h>
int tsnd (int fd, char *buf, unsigned nbytes, int flags);
DESCRIPTION
This function is used to send either normal or expedited
data. fd identifies the local transport endpoint over which
data should be sent, buf points to the user data, nbytes
specifies the number of bytes of user data to be sent, and
flags specifies any optional flags described below.
By default, tsnd operates in synchronous mode and may wait
if flow control restrictions prevent the data from being
accepted by the local transport provider at the time the
call is made. However, if ONDELAY or ONONBLOCK is set
(via topen or fcntl), tsnd will execute in asynchronous
mode, and will fail immediately if there are flow control
restrictions.
Even when there are no flow control restrictions, tsnd will
wait if STREAMS internal resources are not available,
regardless of the state of ONDELAY or ONONBLOCK.
On successful completion, tsnd returns the number of bytes
accepted by the transport provider. Normally this will
equal the number of bytes specified in nbytes. However, if
ONDELAY or ONONBLOCK is set, it is possible that only part
of the data will be accepted by the transport provider. In
this case, tsnd will set TMORE for the data that was sent
(see below) and will return a value less than nbytes. If
nbytes is zero and sending of zero bytes is not supported by
the underlying transport provider, tsnd() will return -1
with terrno set to TBADDATA. A return value of zero indi-
cates that the request to send a zero-length data message
was sent to the provider.
If TEXPEDITED is set in flags, the data will be sent as
expedited data, and will be subject to the interpretations
of the transport provider.
If TMORE is set in flags, or is set as described above, an
indication is sent to the transport provider that the tran-
sport service data unit (TSDU) or expedited transport ser-
vice data unit (ETSDU) is being sent through multiple tsnd
calls. Each tsnd with the TMORE flag set indicates that
another tsnd will follow with more data for the current
TSDU. The end of the TSDU (or ETSDU) is identified by a
tsnd call with the TMORE flag not set. Use of TMORE
Last change: Networking Support Utilities 1
t_snd(3N) NETWORK FUNCTIONS t_snd(3N)
enables a user to break up large logical data units without
losing the boundaries of those units at the other end of the
connection. The flag implies nothing about how the data is
packaged for transfer below the transport interface. If the
transport provider does not support the concept of a TSDU as
indicated in the info argument on return from topen or
tgetinfo, the TMORE flag is not meaningful and should be
ignored.
The size of each TSDU or ETSDU must not exceed the limits of
the transport provider as returned by topen or tgetinfo.
If the size is exceeded, a TSYSERR with system error EPROTO
will occur. However, the tsnd may not fail because EPROTO
errors may not be reported immediately. In this case, a
subsequent call that accesses the transport endpoint will
fail with the associated TSYSERR. If tsnd is issued from
the TIDLE state, the provider may silently discard the
data. If tsnd is issued from any state other than
TDATAXFER, TINREL or TIDLE, the provider will generate a
TSYSERR with system error EPROTO (which may be reported in
the manner described above). On failure, terrno may be set
to one of the following:
[TBADF] The specified file descriptor does not
refer to a transport endpoint.
[TFLOW] ONDELAY or ONONBLOCK was set, but the
flow control mechanism prevented the
transport provider from accepting data
at this time.
[TNOTSUPPORT] This function is not supported by the
underlying transport provider.
[TSYSERR] A system error [see intro(2)] has been
detected during execution of this func-
tion.
[TBADDATA] nbytes is zero and sending zero bytes is
not supported by the transport provider.
SEE ALSO
topen(3N), trcv(3N).
UNIX System V Network Programmer's Guide.
DIAGNOSTICS
On successful completion, tsnd returns the number of bytes
accepted by the transport provider, and it returns -1 on
failure and terrno is set to indicate the error.
Last change: Networking Support Utilities 2