24 lines
503 B
C
24 lines
503 B
C
#include <sys/socket.h>
|
|
#include <string.h>
|
|
#include <errno.h>
|
|
|
|
#include "internal/icmp_recv.h"
|
|
|
|
ssize_t
|
|
recv_receive_packet(int fd, void *buffer, size_t buffer_len,
|
|
struct sockaddr_in *from)
|
|
{
|
|
socklen_t from_len;
|
|
ssize_t n;
|
|
|
|
from_len = sizeof(*from);
|
|
memset(from, 0, sizeof(*from));
|
|
n = recvfrom(fd, buffer, buffer_len, 0, (struct sockaddr *)from,
|
|
&from_len);
|
|
if (n < 0)
|
|
{
|
|
int saved_errno = errno;
|
|
return (EAGAIN == saved_errno || EWOULDBLOCK == saved_errno) ? 0 : -1;
|
|
}
|
|
return n;
|
|
}
|