T_RCVUDATA(3NSL)    Networking Services Library Functions   T_RCVUDATA(3NSL)
NAME
       t_rcvudata - receive a data unit
SYNOPSIS
       #include <xti.h>       
int t_rcvudata(
int fd, 
struct t_unitdata *unitdata, 
int *flags);
DESCRIPTION
       This routine 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 routine that has the same name as an 
XTI routine, 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 is used in connectionless-mode to receive a data unit
       from another transport user. The argument 
fd identifies the local
       transport endpoint through which data will be received, 
unitdata       holds information associated with the received data unit, and 
flags       is set on return to indicate that the complete data unit was not
       received. The argument 
unitdata points to a 
t_unitdata structure
       containing the following members:         
struct netbuf addr;         struct netbuf opt;         struct netbuf udata;       The 
maxlen field of 
addr, 
opt and 
udata must be set before calling
       this function to indicate the maximum size of the buffer for each. If
       the  
maxlen field of  
addr or  
opt is set to zero, no information is
       returned in the  
buf field of this parameter.
       On return from this call, 
addr specifies the protocol address of the
       sending user, 
opt identifies options that were associated with this
       data unit, and 
udata specifies the user data that was received.
       By default, 
t_rcvudata() operates in synchronous mode and will wait
       for a data unit to arrive if none is currently available. However, if       
O_NONBLOCK is set by means of  
t_open(3NSL) or 
fcntl(2), 
t_rcvudata()       will execute in asynchronous mode and will fail if no data units are
       available.
       If the buffer defined in the 
udata field of 
unitdata is not large
       enough to hold the current data unit, the buffer will be filled and       
T_MORE will be set in 
flags on return to indicate that another       
t_rcvudata() should be called to retrieve the rest of the data unit.
       Subsequent calls to 
t_rcvudata() will return zero for the length of
       the address and options until the full data unit has been received.
       If the call is interrupted, 
t_rcvudata() will return 
EINTR and no
       datagrams will have been removed from the endpoint.
RETURN VALUES
       Upon successful completion, a value of  
0 is returned.  Otherwise, a
       value of  -1 is returned and 
t_errno is set to indicate an error.
VALID STATES
       T_IDLE.
ERRORS
       On failure, 
t_errno is set to one of the following:       
TBADF                      The specified file descriptor does not refer to a
                      transport endpoint.       
TBUFOVFLW                      The number of bytes allocated for the incoming
                      protocol address or options 
(maxlen) is greater than                      
0 but not sufficient to store the information. The
                      unit data information to be returned in 
unitdata will
                      be discarded.       
TLOOK                      An asynchronous event has occurred on this transport
                      endpoint and requires immediate attention.       
TNODATA                      O_NONBLOCK was set, but no data units are 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 values that can be set by the 
XTI interface and cannot be
       set by the 
TLI interface are:         
TPROTO         TOUTSTATE       A 
t_errno value that this routine can return under different
       circumstances than its 
XTI counterpart is 
TBUFOVFLW. It can be
       returned even when the 
maxlen field of the corresponding buffer has
       been set to zero.
   Option Buffers
       The format of the options in an 
opt buffer is dictated by the
       transport provider. Unlike the 
XTI interface, the 
TLI interface does
       not fix the buffer format.
ATTRIBUTES
       See 
attributes(7)  for descriptions of the following attributes:
       +---------------+-----------------+
       |ATTRIBUTE TYPE | ATTRIBUTE VALUE |
       +---------------+-----------------+
       |MT Level       | Safe            |
       +---------------+-----------------+
SEE ALSO
       fcntl(2), 
t_alloc(3NSL), 
t_open(3NSL), 
t_rcvuderr(3NSL),       
t_sndudata(3NSL), 
attributes(7)                              October 22, 2014              T_RCVUDATA(3NSL)