recv Function (Winsock)

Function

The recv function retrieves data from a connection-oriented socket or from a set of sockets specified in a fd_set structure.

Syntax

int recv( [in] SOCKET s, [out] char *buf, [in] int len, [in] int flags );

Parameters

Parameters

  • s [in] A descriptor identifying a connected socket.
  • buf [out] A buffer that will receive the data sent over the socket.
  • len [in] The length, in bytes, of the buffer specified by the buf parameter.
  • flags [in] Flags that control the behavior of the function call. See Remarks for a list of possible values.

Return Value

Return Value

If no error occurs, recv returns the number of bytes received. If the calling process has issued a graceful linger for the socket and all in-transit, unsent data has been received by the calling process, and then the peer has shut down the connection gracefully, and recv is called on a non-blocking socket, it returns zero. If a socket is closed, and the data is available to be received, recv will return and indicate success by returning the number of bytes received. If the socket is a connection-oriented socket, and the connection has been reset as the result of a crash or other network failure, recv will fail and set WSAGetLastError to WSAECONNRESET.

If an I/O error occurs, recv will return SOCKET_ERROR, and a specific error code can be retrieved by calling WSAGetLastError.

Remarks

The recv function is used with connection-oriented sockets (for example, those created with the SOCK_STREAM socket type). For connectionless sockets (for example, those created with the SOCK_DGRAM socket type), use the recvfrom function.

If recv returns zero, the other end has performed an orderly shutdown with a shutdown call. By default, this function blocks until data is available or the connection is terminated.

If s is a non-blocking socket and data is not yet available, recv will return SOCKET_ERROR and set WSAGetLastError to WSAEWOULDBLOCK.

The flags parameter can be used to influence the behavior of the function call. The possible values for flags are:

  • MSG_PEEK: (Winsock 2) Specifies that the data should be observed without removing it from the input queue. The next read operation will read the data again.
  • MSG_OOB: (Winsock 2) Process out-of-band data.

Requirements

Requirements

Client: Supported in Windows Vista and later.
Server: Supported in Windows Vista and later.
Header: Declared in winsock2.h (include winsock2.h, ws2tcpip.h)
Library: Link with Ws2_32.lib

For a list of error codes, see Winsock Error Codes.