recv Subroutine

Purpose

Receives messages from connected sockets.

Library

Standard C Library (libc.a)

Syntax

#include <sys/socket.h>
int recv (Socket,
Buffer, Length, Flags)
int  Socket;
void * Buffer;
size_t  Length;
int  Flags;

Description

The recv subroutine receives messages from a connected socket. The recvfrom and recvmsg subroutines receive messages from both connected and unconnected sockets. However, they are usually used for unconnected sockets only.

The recv subroutine returns the length of the message. If a message is too long to fit in the supplied buffer, excess bytes may be truncated depending on the type of socket that issued the message.

If no messages are available at the socket, the recv subroutine waits for a message to arrive, unless the socket is nonblocking. If a socket is nonblocking, the system returns an error.

Use the select subroutine to determine when more data arrives.

The socket applications can be compiled with COMPAT_43 defined. This will make the sockaddr structure BSD 4.3 compatible. For more details refer to socket.h.

Parameters

Item Description
Socket Specifies the socket descriptor.
Buffer Specifies an address where the message should be placed.
Length Specifies the size of the Buffer parameter.
Flags Points to a value controlling the message reception. The /usr/include/sys/socket.h file defines the Flags parameter. The argument to receive a call is formed by logically ORing one or more of the following values:
MSG_OOB
Processes out-of-band data. The significance of out-of-band data is protocol-dependent.
MSG_PEEK
Peeks at incoming data. The data continues to be treated as unread and will be read by the next call to recv() or a similar function.
MSG_WAITALL
Requests that the function not return until the requested number of bytes have been read. The function can return fewer than the requested number of bytes only if a signal is caught, the connection is terminated, or an error is pending for the socket.

Return Values

Upon successful completion, the recv subroutine returns the length of the message in bytes.

If the recv subroutine is unsuccessful, the subroutine handler performs the following functions:

  • Returns a value of -1 to the calling program.
  • Returns a 0 if the connection disconnects.
  • Moves an error code, indicating the specific error, into the errno global variable.

Error Codes

The recv subroutine is unsuccessful if any of the following errors occurs:

Error Description
EBADF The Socket parameter is not valid.
ECONNRESET The remote peer forces the connection to be closed.
EFAULT The data was directed to be received into a nonexistent or protected part of the process address space. The Buffer parameter is not valid.
EINTR A signal interrupted the recv subroutine before any data was available.
EINVAL The MSG_OOB flag is set and no out-of-band data is available.
ENOBUF Insufficient resources are available in the system to perform the operation.
ENOTCONN A receive is attempted on a SOCK_STREAM socket that is not connected.
ENOTSOCK The Socket parameter refers to a file, not a socket.
EOPNOTSUPP MSG_OOB flag is set for a SOCK_DGRAM socket, or MSG_OOB flag is set for any AF_UNIX socket.
ETIMEDOUT The connection timed out during connection establishment, or there was a transmission timeout on an active connection.
EWOULDBLOCK The socket is marked nonblocking, and no connections are present to be accepted.