gtpc1m46 | Transmission Control Protocol/Internet Protocol |
The recv function receives data on a socket with descriptor
s and stores it in a buffer.
Format
#include <socket.h>
int recv(int s,
char *buf,
int len,
int flags);
- s
- The socket descriptor.
- buf
- Pointer to the buffer that receives the data.
- len
- Length, in bytes, of the buffer pointed to by the buf
parameter. The maximum number of bytes that can be received is
32 768.
- flags
- Must be set to 0 or one or more of the following flags. If you
specify more than one flag, use the logical OR operator (|) to separate
them:
- MSG_OOB
- Reads any out-of-band data on the socket.
- MSG_PEEK
- Peeks at the data present on the socket; the data is returned but not
consumed, so a later receive operation sees the same data.
Normal Return
If successful, the function returns the length, in bytes, of the message or
datagram.
In addition, the number of bytes copied into the buffer is returned.
If an end-of-file condition is received or the connection is closed, 0 is
returned.
Error Return
A return code equal to -1 indicates an error. You can get the
specific error code by calling sock_errno. See Appendix C, Socket Error Return Codes for more information about socket errors.
- Note:
- Unless otherwise stated in the description, the following error codes can be
returned for either TCP/IP offload support or TCP/IP native stack
support.
- Value
- Description
- SOCFAULT
- Using buf and len would result in an attempt to
access a protected address space.
- SOCNOTSOCK
- The s parameter is not a valid socket descriptor.
- SOCWOULDBLOCK
- The s parameter is in nonblocking mode, and no data is
available to read.
- SOCNOBUFS
- There is not enough space available to process the function call.
This error code is returned only for TCP/IP offload support.
- SOCNOTCONN
- A stream socket was used to issue the recv function, and the
socket was not connected.
- EIBMIUCVERR
- An error occurred while the function call was sent to the offload
device. This error code is returned only for TCP/IP offload
support.
- E1052STATE
- The socket was closed because the system was in or cycling down to 1052
state.
- EINACT
- All offload devices associated with the socket descriptor have been
disconnected. The socket is closed. This error code is returned
only for TCP/IP offload support.
- EINACTWS
- An offload device associated with the socket descriptor has been
disconnected. The socket is still available. This error code is
returned only for TCP/IP offload support.
- ESYSTEMERROR
- A system error has occurred and closed the socket.
- SOCTIMEDOUT
- The operation timed out. The socket is still available. This
error code is returned only for TCP/IP native stack support.
- SOCINVAL
- The MSG_OOB option was specified for a socket other than a stream socket
or the MSG_OOB option was specified, but out-of-band data is queued inline for
this socket. This error code is returned only for TCP/IP native stack
support.
Programming Considerations
- This function applies only to connected sockets.
- This function returns up to len bytes of data. If there
are fewer than the requested number of bytes available, the function returns
the number currently available.
- If data is not available for socket s, and s is in
blocking mode, the recv function blocks the caller until data
arrives. If data is not available, and s is in nonblocking
mode, recv returns a -1 and sets sock_errno to
SOCWOULDBLOCK.
- If a bind has not yet been issued to the socket, a
bind is issued on behalf of the application for a non-stream
socket.
- For sockets using TCP/IP native stack support, the receive timeout value
(the SO_RCVTIMEO setsockopt option) determines how long to wait for
data to be received before the recv function times out.
- For TCP sockets using TCP/IP native stack support, the receive low-water
mark (the SO_RCVLOWAT setsockopt option) determines the minimum
amount of data that must be received before the recv function is
completed. If the recv function times out, any data that was
received is returned to the application even if the amount of data received is
less than the receive low-water mark value.
- The recv function cannot be issued if an
activate_on_receipt or activate_on_receipt_with_length
call is pending for the socket. These operations are mutually
exclusive.
Examples
The following example reads in 1 byte of out-of-band data.
#include <socket.h>
·
·
·
int rc;
int server_sock;
char oob_data;
·
·
·
rc = recv(server_sock,oob_data,sizeof(oob_data),MSG_OOB);
if (rc > 0)
{
/* Process the oob data from the sender */
·
·
·
}
Related Information