DLPI_RECV(3DLPI) Data Link Provider Interface Library Functions
NAME
dlpi_recv - receive a data message using DLPI
SYNOPSIS
cc [
flag ... ]
file ...
-ldlpi [
library ... ]
#include <libdlpi.h>
int dlpi_recv(
dlpi_handle_t dh,
void *saddrp,
size_t * saddrlenp,
void *msgbuf,
size_t *msglenp,
int msec,
dlpi_recvinfo_t *recvp);
DESCRIPTION
The
dlpi_recv() function attempts to receive data messages over the
DLPI link instance associated with the
DLPI handle
dh. If
dh is not
in the
DL_IDLE DLPI state, the attempt fails. The caller must ensure
that
msgbuf is at least
msglenp bytes in size. Upon success,
msgbuf contains the data message received,
msglenp contains the number of
bytes placed in
msgbuf.
The caller must ensure that
saddrp is at least
DLPI_PHYSADDR_MAX bytes in size and
saddrlenp must contain the length of
saddrp. Upon
success,
saddrp contains the address of the source sending the data
message and
saddrlenp contains the source address length. If the
caller is not interested in the source address, both
saddrp and
saddrlenp can be left as
NULL. If the source address is not
available,
saddrp is not filled in and
saddrlenp is set to zero.
The
dlpi_recvinfo_t is a structure defined in
<libdlpi.h> as follows:
typedef struct {
uchar_t dri_destaddr[DLPI_PHYSADDR_MAX];
uchar_t dri_destaddrlen;
dlpi_addrtype_t dri_destaddrtype;
size_t dri_totmsglen;
} dlpi_recvinfo_t;
Upon success, if
recvp is not set to
NULL,
dri_destaddr contains the
destination address,
dri_destaddrlen contains the destination address
length, and
dri_totmsglen contains the total length of the message
received. If the destination address is unicast,
dri_destaddrtype is
set to
DLPI_ADDRTYPE_UNICAST. Otherwise, it is set to
DLPI_ADDRTYPE_GROUP.
The values of
msglenp and
dri_totmsglen might vary when a message
larger than the size of
msgbuf is received. In that case, the caller
can use
dri_totmsglen to determine the original total length of the
message.
If the handle is in raw mode, as described in
dlpi_open(3DLPI),
msgbuf starts with the link-layer header. See
dlpi(4P). The values of
saddrp,
saddrlenp, and all the members of
dlpi_recvinfo_t except
dri_totmsglen are invalid because the address information is already
included in the link-layer header returned by
msgbuf.
If no message is received within
msec milliseconds,
dlpi_recv() returns
DLPI_ETIMEDOUT. If
msec is
0,
dlpi_recv() does not block. If
msec is
-1,
dlpi_recv() does block until a data message is received.
RETURN VALUES
Upon success,
DLPI_SUCCESS is returned. If
DL_SYSERR is returned,
errno contains the specific UNIX system error value. Otherwise, a
DLPI error value defined in
<sys/dlpi.h> or an error value listed in
the following section is returned.
ERRORS
DLPI_EBADMSG Bad DLPI message
DLPI_EINHANDLE Invalid
DLPI handle
DLPI_EINVAL Invalid argument
DLPI_ETIMEDOUT DLPI operation timed out
DLPI_EUNAVAILSAP Unavailable
DLPI SAP DLPI_FAILURE DLPI operation failed
ATTRIBUTES
See
attributes(7) for description of the following attributes:
+--------------------+-----------------+
| ATTRIBUTE TYPE | ATTRIBUTE VALUE |
+--------------------+-----------------+
|Interface Stability | Committed |
+--------------------+-----------------+
|MT-Level | Safe |
+--------------------+-----------------+
SEE ALSO
dlpi_bind(3DLPI),
dlpi_open(3DLPI),
libdlpi(3LIB),
dlpi(4P),
attributes(7) August 22, 2007 DLPI_RECV(3DLPI)