[Go to CFHT Home Page] Man Pages
Back to Software Index  BORDER=0Manpage Top Level
    t_rcv(3N) manual page Table of Contents

Name

t_rcv - receive data or expedited data sent over a connection

Synopsis

cc [ flag ... ] file ... -lnsl [ library ... ]

int t_rcv(int fildes, char *buf, unsigned nbytes, int *flags);

MT-Level

MT-Safe

Description

This function receives either normal or expedited data. fildes 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. 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_NDELAY or O_NONBLOCK is set (using t_open(3N) 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. 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(3N) or t_getinfo(3N) , the T_MORE flag is not meaningful and should be ignored.

On return, the data returned is expedited data if T_EXPEDITED is set in flags. If the number of bytes of expedited data exceeds nbytes, t_rcv() will set T_EXPEDITED and T_MORE on return from the initial call. Subsequent calls to retrieve the remaining ETSDU will have T_EXPEDITED set on return. The end of the ETSDU is identified by the return of a t_rcv() call with the T_MORE flag not set.

If expedited data arrives after part of a ETSDU has been retrieved, receipt of the remainder of the TSDU will be suspended until the ETSDU has been processed. Only after the full ETSDU has been retrieved (T_MORE not set) will the remainder of the TSDU be available to the user.

Return Values

On successful completion, t_rcv() returns the number of bytes received. On failure t_rcv() returns -1, t_errno is set to indicate the error, and possibly errno is set.

Errors

On failure, t_errno will be 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_NDELAY or 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.
TSYSERR
A system error has occurred during execution of this function, errno will be set to the specific error.

See Also

fcntl(2) , t_getinfo(3N) , t_open(3N) , t_snd(3N)

Notes

This interface is safe in multithreaded applications.


Table of Contents