Chapter Contents |
Previous |
Next |
recvfrom |
Portability: | UNIX compatible |
SYNOPSIS | |
DESCRIPTION | |
RETURN VALUE | |
CAUTION | |
PORTABILITY | |
EXAMPLE | |
RELATED FUNCTIONS |
SYNOPSIS |
#include <sys/types.h> #include <sys/socket.h> int recvfrom(int s, void *buf, int len, int flags, void *from, int *addrlen);
DESCRIPTION |
recvfrom
receives data from an unconnected or connected socket descriptor
s
. If
from
is nonzero, the source address of the message
is stored in the buffer addressed by
from
.
addrlen
is
the size of the buffer pointed to by
from
.
buf
points
to the buffer receiving the message.
len
is the size of the message.
recvfrom
is particularly useful for unconnected datagram sockets.
If no messages are available,
recvfrom
blocks the call until a message arrives unless
the socket
is set in non-blocking mode.
flags
consists of the following:
MSG_OOB
SO_OOBINLINE
socket option, multiple
bytes of data can be accessed, and the
MSG_OOB
option is not necessary.
MSG_PEEK
recvfrom
call.
RETURN VALUE |
If
recvfrom
succeeds, it returns the length of the message. If
recv
returns a
0
, it indicates that the connection is closed. Otherwise, it
returns
a
-1
, and sets
errno
to indicate the type of error. It is common
for
recvfrom
to return
fewer than the total number of bytes in the buffers. This is not an error.
CAUTION |
recvfrom
discards excess bytes if a datagram is larger than the specified
buffer.
PORTABILITY |
recvfrom
is portable to other environments, including most UNIX systems,
that implement BSD sockets.
EXAMPLE |
In this example,
recvfrom
receives a datagram on socket descriptor
s
and places it in buffer
in
.
#include <stdlib.h> #include <sys/types.h> #include <sys/socket.h> #include <netinet/in.h> #include <arpa/inet.h> #include <stdio.h> #define MAX_DGRAM_SIZE 256 /* Chosen by the application. */ f() { int s; int b; struct sockaddr_in from; /* Sender's address. */ int fromlen; /* Length of sender's address. */ char in[MAX_DGRAM_SIZE] ; /* Open a datagram socket to receive the packet. */ s = socket(AF_INET, SOCK_DGRAM, 0); . . . /* Receive a datagram into the buffer. */ fromlen = sizeof(from); b = (recvfrom(s, in, MAX_DGRAM_SIZE, 0, &from, &fromlen)); if (b == -1) { perror("Recvfrom failed"); return -1; } printf("Datagram size: %d.\n", b); printf("Datagram's IP address is: %s\n", inet_ntoa(from.sin_addr)); printf("Datagram's port is: %d\n", (int) ntohs(from.sin_port)); . . . }
RELATED FUNCTIONS |
connect
,
getsockopt
,
recv
,
recvmsg
,
send
,
sendmsg
,
sendto
,
setsockopt
Chapter Contents |
Previous |
Next |
Top of Page |
Copyright © 2001 by SAS Institute Inc., Cary, NC, USA. All rights reserved.