summaryrefslogtreecommitdiff
path: root/src/libsystemd-network/sd-dhcp-client.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/libsystemd-network/sd-dhcp-client.c')
-rw-r--r--src/libsystemd-network/sd-dhcp-client.c41
1 files changed, 23 insertions, 18 deletions
diff --git a/src/libsystemd-network/sd-dhcp-client.c b/src/libsystemd-network/sd-dhcp-client.c
index 14cbde133f..16574d28c7 100644
--- a/src/libsystemd-network/sd-dhcp-client.c
+++ b/src/libsystemd-network/sd-dhcp-client.c
@@ -1930,13 +1930,13 @@ static int client_receive_message_udp(
assert(client);
buflen = next_datagram_size_fd(fd);
- if (buflen == -ENETDOWN)
- /* the link is down. Don't return an error or the I/O event
- source will be disconnected and we won't be able to receive
- packets again when the link comes back. */
+ if (buflen < 0) {
+ if (ERRNO_IS_TRANSIENT(buflen) || ERRNO_IS_DISCONNECT(buflen))
+ return 0;
+
+ log_dhcp_client_errno(client, buflen, "Failed to determine datagram size to read, ignoring: %m");
return 0;
- if (buflen < 0)
- return buflen;
+ }
message = malloc0(buflen);
if (!message)
@@ -1944,12 +1944,11 @@ static int client_receive_message_udp(
len = recv(fd, message, buflen, 0);
if (len < 0) {
- /* see comment above for why we shouldn't error out on ENETDOWN. */
- if (ERRNO_IS_TRANSIENT(errno) || errno == ENETDOWN)
+ if (ERRNO_IS_TRANSIENT(errno) || ERRNO_IS_DISCONNECT(errno))
return 0;
- return log_dhcp_client_errno(client, errno,
- "Could not receive message from UDP socket: %m");
+ log_dhcp_client_errno(client, errno, "Could not receive message from UDP socket, ignoring: %m");
+ return 0;
}
if ((size_t) len < sizeof(DHCPMessage)) {
log_dhcp_client(client, "Too small to be a DHCP message: ignoring");
@@ -1995,7 +1994,8 @@ static int client_receive_message_udp(
return 0;
}
- return client_handle_message(client, message, len);
+ (void) client_handle_message(client, message, len);
+ return 0;
}
static int client_receive_message_raw(
@@ -2023,10 +2023,13 @@ static int client_receive_message_raw(
assert(client);
buflen = next_datagram_size_fd(fd);
- if (buflen == -ENETDOWN)
+ if (buflen < 0) {
+ if (ERRNO_IS_TRANSIENT(buflen) || ERRNO_IS_DISCONNECT(buflen))
+ return 0;
+
+ log_dhcp_client_errno(client, buflen, "Failed to determine datagram size to read, ignoring: %m");
return 0;
- if (buflen < 0)
- return buflen;
+ }
packet = malloc0(buflen);
if (!packet)
@@ -2036,10 +2039,11 @@ static int client_receive_message_raw(
len = recvmsg_safe(fd, &msg, 0);
if (len < 0) {
- if (ERRNO_IS_TRANSIENT(len) || len == -ENETDOWN)
+ if (ERRNO_IS_TRANSIENT(len) || ERRNO_IS_DISCONNECT(len))
return 0;
- return log_dhcp_client_errno(client, len,
- "Could not receive message from raw socket: %m");
+
+ log_dhcp_client_errno(client, len, "Could not receive message from raw socket, ignoring: %m");
+ return 0;
}
if ((size_t) len < sizeof(DHCPPacket))
return 0;
@@ -2056,7 +2060,8 @@ static int client_receive_message_raw(
len -= DHCP_IP_UDP_SIZE;
- return client_handle_message(client, &packet->dhcp, len);
+ (void) client_handle_message(client, &packet->dhcp, len);
+ return 0;
}
int sd_dhcp_client_send_renew(sd_dhcp_client *client) {