diff options
author | Yu Watanabe <watanabe.yu+github@gmail.com> | 2021-12-09 04:30:54 +0900 |
---|---|---|
committer | Zbigniew Jędrzejewski-Szmek <zbyszek@in.waw.pl> | 2021-12-09 09:10:51 +0100 |
commit | ab8a8a4e7721270196f9c7984223fcff41754780 (patch) | |
tree | 884302f6abe08f4dc6fab178bc0e6ed10e73602f /src/libsystemd-network/sd-radv.c | |
parent | d2d602f4b4c1614c35000dd6a5c351c482902ee4 (diff) | |
download | systemd-ab8a8a4e7721270196f9c7984223fcff41754780.tar.gz |
libsystemd-network: ignore -ENETDOWN or friends in recv()
And this makes most errors in io events ignored.
Diffstat (limited to 'src/libsystemd-network/sd-radv.c')
-rw-r--r-- | src/libsystemd-network/sd-radv.c | 17 |
1 files changed, 11 insertions, 6 deletions
diff --git a/src/libsystemd-network/sd-radv.c b/src/libsystemd-network/sd-radv.c index 4f5dbf0090..f8ffb6358f 100644 --- a/src/libsystemd-network/sd-radv.c +++ b/src/libsystemd-network/sd-radv.c @@ -258,8 +258,13 @@ static int radv_recv(sd_event_source *s, int fd, uint32_t revents, void *userdat assert(ra->event); buflen = next_datagram_size_fd(fd); - if (buflen < 0) - return (int) buflen; + if (buflen < 0) { + if (ERRNO_IS_TRANSIENT(buflen) || ERRNO_IS_DISCONNECT(buflen)) + return 0; + + log_radv_errno(ra, buflen, "Failed to determine datagram size to read, ignoring: %m"); + return 0; + } buf = new0(char, buflen); if (!buf) @@ -267,6 +272,9 @@ static int radv_recv(sd_event_source *s, int fd, uint32_t revents, void *userdat r = icmp6_receive(fd, buf, buflen, &src, ×tamp); if (r < 0) { + if (ERRNO_IS_TRANSIENT(r) || ERRNO_IS_DISCONNECT(r)) + return 0; + switch (r) { case -EADDRNOTAVAIL: (void) in_addr_to_string(AF_INET6, (const union in_addr_union*) &src, &addr); @@ -281,11 +289,8 @@ static int radv_recv(sd_event_source *s, int fd, uint32_t revents, void *userdat log_radv(ra, "Received invalid source address from ICMPv6 socket. Ignoring."); break; - case -EAGAIN: /* ignore spurious wakeups */ - break; - default: - log_radv_errno(ra, r, "Unexpected error receiving from ICMPv6 socket, Ignoring: %m"); + log_radv_errno(ra, r, "Unexpected error receiving from ICMPv6 socket, ignoring: %m"); break; } |