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