libicmp/src/recv/core/receive_packet.c
2026-03-19 02:43:46 +01:00

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;
}