T_RCV(3NSL)         Networking Services Library Functions        T_RCV(3NSL)
NAME
       t_rcv - receive data or expedited data sent over a connection
SYNOPSIS
       #include <xti.h>       
int t_rcv(
int fd, 
void *buf, 
unsigned int nbytes, 
int *flags);
DESCRIPTION
       This function is part of the 
XTI interfaces which evolved from the       
TLI interfaces. 
XTI represents the future evolution of these
       interfaces. However, 
TLI interfaces are supported for compatibility.
       When using a 
TLI function that has the same name as an 
XTI function,
       the 
tiuser.h header file must be used.  Refer to the  
TLI       COMPATIBILITY section for a description of differences between the
       two interfaces.
       This function receives either normal or expedited data. The argument       
fd identifies the local transport endpoint through which data will
       arrive, 
buf points to a receive buffer where user data will be
       placed, and 
nbytes specifies the size of the receive buffer. The
       argument 
flags may be set on return from 
t_rcv() and specifies
       optional flags as described below.
       By default, 
t_rcv() operates in synchronous mode and will wait for
       data to arrive if none is currently available. However, if 
O_NONBLOCK       is set by means of 
t_open(3NSL) or 
fcntl(2), 
t_rcv() will execute in
       asynchronous mode and will fail if no data is available. See 
TNODATA       below.
       On return from the call, if  
T_MORE is set in 
flags, this indicates
       that there is more data, and the current transport service data unit
       (TSDU) or expedited transport service data unit (ETSDU) must be
       received in multiple 
t_rcv() calls. In the asynchronous mode, or
       under unusual conditions (for example, the arrival of a signal or       
T_EXDATA event),  the  
T_MORE flag may be set on return from the       
t_rcv() call even when the number of bytes received is less than the
       size of the receive buffer specified. Each 
t_rcv() with the  
T_MORE       flag set indicates that another 
t_rcv() must follow to get more data
       for the current TSDU. The end of the TSDU is identified by the return
       of a 
t_rcv() call with the  
T_MORE flag not set. If the transport
       provider does not support the concept of a TSDU as indicated in the       
info argument on return from 
t_open(3NSL) or 
t_getinfo(3NSL), the       
T_MORE flag is not meaningful and should be ignored.  If 
nbytes is
       greater than zero on the call to 
t_rcv(), 
t_rcv() will return  
0 only
       if the end of a TSDU is being returned to the user.
       On return, the data is expedited if  
T_EXPEDITED is set in flags.  If       
T_MORE is also set, it indicates that the number of expedited bytes
       exceeded nbytes, a signal has interrupted the  call, or that an
       entire ETSDU was not available (only for transport protocols that
       support fragmentation of ETSDUs).  The rest of the ETSDU will be
       returned by subsequent calls to 
t_rcv() which will return with       
T_EXPEDITED set in flags. The end of the ETSDU is identified by the
       return of a  
t_rcv() call with 
T_EXPEDITED set and  
T_MORE cleared.
       If the entire ETSDU is not available it is possible for normal data
       fragments to be returned between the initial and final fragments of
       an ETSDU.
       If a signal arrives, 
t_rcv() returns, giving the user any data
       currently available.  If no data is available,  
t_rcv() returns  -1,
       sets 
t_errno to 
TSYSERR and  
errno to 
EINTR. If some data is
       available,  
t_rcv() returns the number of bytes received and 
T_MORE       is set in flags.
       In synchronous mode, the only way for the user to be notified of the
       arrival of normal or expedited data is to issue this function or
       check for the 
T_DATA or  
T_EXDATA events using the 
t_look(3NSL)       function.  Additionally, the process can arrange to be notified by
       means of the EM interface.
RETURN VALUES
       On successful completion, 
t_rcv() returns the number of bytes
       received.  Otherwise, it returns  
-1 on failure and 
t_errno is set to
       indicate the error.
VALID STATES
       T_DATAXFER, 
T_OUTREL.
ERRORS
       On failure, 
t_errno is set to one of the following:       
TBADF                      The specified file descriptor does not refer to a
                      transport endpoint.       
TLOOK                      An asynchronous event has occurred on this transport
                      endpoint and requires immediate attention.       
TNODATA                      O_NONBLOCK was set, but no data is currently available
                      from the transport provider.       
TNOTSUPPORT                      This function is not supported by the underlying
                      transport provider.       
TOUTSTATE                      The communications endpoint referenced by 
fd is not in
                      one of the states in which a call to this function is
                      valid.       
TPROTO                      This error indicates that a communication problem has
                      been detected between XTI and the transport provider
                      for which there is no other suitable XTI error                      
(t_errno).       
TSYSERR                      A system error has occurred during execution of this
                      function.
TLI COMPATIBILITY
       The 
XTI and 
TLI interface definitions have common names but use
       different header files. This, and other semantic differences between
       the two interfaces are described in the subsections below.
   Interface Header
       The 
XTI interfaces use the header file, 
xti.h. 
TLI interfaces should       
not use this header.  They should use the header:
         #include <tiuser.h>
   Error Description Values
       The 
t_errno value that can be set by the 
XTI interface and cannot be
       set by the 
TLI interface is:         
TPROTOATTRIBUTES
       See 
attributes(7)  for descriptions of the following attributes:
       +--------------------+-------------------+
       |  ATTRIBUTE TYPE    |  ATTRIBUTE VALUE  |
       +--------------------+-------------------+
       |Interface Stability | Committed         |
       +--------------------+-------------------+
       |MT-Level            | Safe              |
       +--------------------+-------------------+
       |Standard            | See 
standards(7). |
       +--------------------+-------------------+
SEE ALSO
       fcntl(2), 
t_getinfo(3NSL), 
t_look(3NSL), 
t_open(3NSL), 
t_snd(3NSL),       
attributes(7), 
standards(7)                               August 24, 2007                   T_RCV(3NSL)