recvfrom
The Windows Sockets
recvfrom function receives a datagram and stores the source address.
int recvfrom (
SOCKET s,
|
|
char FAR* buf,
|
|
int len,
|
|
int flags,
|
|
struct sockaddr FAR* from,
|
|
int FAR* fromlen
|
|
);
|
|
Parameters
s
[in] A descriptor identifying a bound socket.
buf
[out] A buffer for the incoming data.
len
[in] The length of
buf.
flags
[in] Specifies the way in which the call is made.
from
[out] An optional pointer to a buffer which will hold the source address upon
return.
fromlen
[in/out] An optional pointer to the size of the
from buffer.
Remarks
This function is used to read incoming data on a (possibly connected) socket
and capture the address from which the data was sent.
For stream-oriented sockets such as those of type SOCK_STREAM, as much
information as is currently available up to the size of the buffer supplied is
returned. If the socket has been configured for in-line reception of out-of-band data
(socket option SO_OOBINLINE) and out-of-band data is unread, only out-of-band
data will be returned. The application can use the
ioctlsocket SIOCATMARK to determine whether any more out-of-band data remains to be read.
The
from and
fromlen parameters are ignored for connection-oriented sockets.
For message-oriented sockets, data is extracted from the first enqueued
message, up to the size of the buffer supplied. If the datagram or message is larger
than the buffer supplied, the buffer is filled with the first part of the
datagram, and
recvfrom generates the error WSAEMSGSIZE. For unreliable protocols (for example, UDP)
the excess data is lost.
If
from is nonzero, and the socket is not connection oriented (for example, type
SOCK_DGRAM), the network address of the peer which sent the data is copied to the
corresponding struct sockaddr. The value pointed to by
fromlen is initialized to the size of this structure, and is modified on return to
indicate the actual size of the address stored there.
If no incoming data is available at the socket, the
recvfrom call waits for data to arrive unless the socket is nonblocking. In this case,
a value of SOCKET_ERROR is returned with the error code set to WSAEWOULDBLOCK.
The
select,
WSAAsyncSelect, or
WSAEventSelect can be used to determine when more data arrives.
If the socket is connection oriented and the remote side has shut down the
connection gracefully, a
recvfrom will complete immediately with zero bytes received. If the connection has
been reset
recvfrom will fail with the error WSAECONNRESET.
Flags can be used to influence the behavior of the function invocation beyond the
options specified for the associated socket. That is, the semantics of this
function are determined by the socket options and the
flags parameter. The latter is constructed by or-ing any of the following values:
Value
| Meaning
|
MSG_PEEK
| Peek at the incoming data. The data is copied into the buffer but is not
removed from the input queue.
|
MSG_OOB
| Process out-of-band data. (See section Out-Of-Band data for a discussion of this topic.)
|
Return Values
If no error occurs,
recvfrom returns the number of bytes received. If the connection has been gracefully
closed, the return value is zero. Otherwise, a value of SOCKET_ERROR is
returned, and a specific error code can be retrieved by calling
WSAGetLastError.
Error Codes
WSANOTINITIALISED
| A successful WSAStartup must occur before using this function.
|
WSAENETDOWN
| The network subsystem has failed.
|
WSAEFAULT
| The buf or from parameters are not part of the user address space, or the fromlen argument is too small to accommodate the peer address.
|
WSAEINTR
| The (blocking) call was canceled through WSACancelBlockingCall.
|
WSAEINPROGRESS
| A blocking Windows Sockets 1.1 call is in progress, or the service provider is
still processing a callback function.
|
WSAEINVAL
| The socket has not been bound with bind, or an unknown flag was specified, or MSG_OOB was specified for a socket with
SO_OOBINLINE enabled, or (for byte stream style sockets only) len was zero or negative.
|
WSAENETRESET
| The connection has been broken due to the remote host resetting.
|
WSAENOTCONN
| The socket is not connected (connection-oriented sockets only).
|
WSAENOTSOCK
| The descriptor is not a socket.
|
WSAEOPNOTSUPP
| MSG_OOB was specified, but the socket is not stream style such as type
SOCK_STREAM, out-of-band data is not supported in the communication domain associated
with this socket, or the socket is unidirectional and supports only send
operations.
|
WSAESHUTDOWN
| The socket has been shut down; it is not possible to recvfrom on a socket after shutdown has been invoked with how set to SD_RECEIVE or SD_BOTH.
|
WSAEWOULDBLOCK
| The socket is marked as nonblocking and the recvfrom operation would block.
|
WSAEMSGSIZE
| The message was too large to fit into the specified buffer and was truncated.
|
WSAECONNABORTED
| The virtual circuit was terminated due to a time-out or other failure. The
application should close the socket as it is no longer usable.
|
WSAETIMEDOUT
| The connection has been dropped, because of a network failure or because the
system on the other end went down without notice.
|
WSAECONNRESET
| The virtual circuit was reset by the remote side executing a "hard" or
"abortive" close. The application should close the socket as it is no longer usable.
On a UDP datagram socket this error would indicate that a previous send
operation resulted in an ICMP "Port Unreachable" message.
|
See Also
recv,
send,
socket,
WSAAsyncSelect,
WSAEventSelect
- Software for developers
-
Delphi Components
.Net Components
Software for Android Developers
- More information resources
-
MegaDetailed.Net
Unix Manual Pages
Delphi Examples
- Databases for Amazon shops developers
-
Amazon Categories Database
Browse Nodes Database