l = read(notify, &buffer, sizeof(buffer));
if (l < 0) {
- if (IN_SET(errno, EINTR, EAGAIN))
+ if (ERRNO_IS_TRANSIENT(errno))
continue;
return -errno;
l = read(fd, &buffer, sizeof(buffer));
if (l < 0) {
- if (IN_SET(errno, EINTR, EAGAIN))
+ if (ERRNO_IS_TRANSIENT(errno))
return 0;
return log_error_errno(errno, "Failed to read control group inotify events: %m");
}
n = recvmsg_safe(m->notify_fd, &msghdr, MSG_DONTWAIT|MSG_CMSG_CLOEXEC|MSG_TRUNC);
- if (IN_SET(n, -EAGAIN, -EINTR))
- return 0; /* Spurious wakeup, try again */
- if (n == -EXFULL) {
- log_warning("Got message with truncated control data (too many fds sent?), ignoring.");
- return 0;
- }
- if (n < 0)
+ if (n < 0) {
+ if (ERRNO_IS_TRANSIENT(n))
+ return 0; /* Spurious wakeup, try again */
+ if (n == -EXFULL) {
+ log_warning("Got message with truncated control data (too many fds sent?), ignoring.");
+ return 0;
+ }
/* If this is any other, real error, then let's stop processing this socket. This of course
* means we won't take notification messages anymore, but that's still better than busy
* looping around this: being woken up over and over again but being unable to actually read
* the message off the socket. */
return log_error_errno(n, "Failed to receive notification message: %m");
+ }
CMSG_FOREACH(cmsg, &msghdr) {
if (cmsg->cmsg_level == SOL_SOCKET && cmsg->cmsg_type == SCM_RIGHTS) {
}
n = read(m->signal_fd, &sfsi, sizeof(sfsi));
- if (n != sizeof(sfsi)) {
- if (n >= 0) {
- log_warning("Truncated read from signal fd (%zu bytes), ignoring!", n);
- return 0;
- }
-
- if (IN_SET(errno, EINTR, EAGAIN))
+ if (n < 0) {
+ if (ERRNO_IS_TRANSIENT(errno))
return 0;
/* We return an error here, which will kill this handler,
* to avoid a busy loop on read error. */
return log_error_errno(errno, "Reading from signal fd failed: %m");
}
+ if (n != sizeof(sfsi)) {
+ log_warning("Truncated read from signal fd (%zu bytes), ignoring!", n);
+ return 0;
+ }
log_received_signal(sfsi.ssi_signo == SIGCHLD ||
(sfsi.ssi_signo == SIGTERM && MANAGER_IS_USER(m))
l = recv(fd, &buffer, sizeof(buffer), MSG_DONTWAIT);
if (l < 0) {
- if (IN_SET(errno, EINTR, EAGAIN))
+ if (ERRNO_IS_TRANSIENT(errno))
return 0;
return log_error_errno(errno, "Failed to read from user lookup fd: %m");
l = read(s->inotify_fd, &buffer, sizeof(buffer));
if (l < 0) {
- if (IN_SET(errno, EAGAIN, EINTR))
+ if (ERRNO_IS_TRANSIENT(errno))
return 0;
return log_error_errno(errno, "Failed to read inotify event: %m");
assert(m);
n = read_datagram(fd, &sender, &datagram, &passed_fd);
- if (IN_SET(n, -EAGAIN, -EINTR))
- return 0;
- if (n < 0)
+ if (n < 0) {
+ if (ERRNO_IS_TRANSIENT(n))
+ return 0;
return log_error_errno(n, "Failed to read notify datagram: %m");
+ }
if (sender.pid <= 0) {
log_warning("Received notify datagram without valid sender PID, ignoring.");
int r;
n = recvmsg_safe(fd, &msghdr, MSG_DONTWAIT|MSG_CMSG_CLOEXEC);
- if (IN_SET(n, -EAGAIN, -EINTR))
- return 0;
- if (n < 0)
+ if (n < 0) {
+ if (ERRNO_IS_TRANSIENT(n))
+ return 0;
return (int) n;
+ }
cmsg_close_all(&msghdr);
return 0;
}
- if (IN_SET(errno, EAGAIN, EINTR, EPIPE))
+ if (ERRNO_IS_TRANSIENT(errno) || errno == EPIPE)
return 0;
return log_error_errno(errno, "Failed to read from /dev/kmsg: %m");
iovec = IOVEC_MAKE(s->buffer, MALLOC_ELEMENTSOF(s->buffer) - 1); /* Leave room for trailing NUL we add later */
n = recvmsg_safe(fd, &msghdr, MSG_DONTWAIT|MSG_CMSG_CLOEXEC);
- if (IN_SET(n, -EINTR, -EAGAIN))
- return 0;
- if (n == -EXFULL) {
- log_warning("Got message with truncated control data (too many fds sent?), ignoring.");
- return 0;
- }
- if (n < 0)
+ if (n < 0) {
+ if (ERRNO_IS_TRANSIENT(n))
+ return 0;
+ if (n == -EXFULL) {
+ log_warning("Got message with truncated control data (too many fds sent?), ignoring.");
+ return 0;
+ }
return log_error_errno(n, "recvmsg() failed: %m");
+ }
CMSG_FOREACH(cmsg, &msghdr)
if (cmsg->cmsg_level == SOL_SOCKET &&
l = recvmsg(s->fd, &msghdr, MSG_DONTWAIT|MSG_CMSG_CLOEXEC);
if (l < 0) {
- if (IN_SET(errno, EINTR, EAGAIN))
+ if (ERRNO_IS_TRANSIENT(errno))
return 0;
log_warning_errno(errno, "Failed to read from stream: %m");
len = recv(fd, message, buflen, 0);
if (len < 0) {
/* see comment above for why we shouldn't error out on ENETDOWN. */
- if (IN_SET(errno, EAGAIN, EINTR, ENETDOWN))
+ if (ERRNO_IS_TRANSIENT(errno) || errno == ENETDOWN)
return 0;
return log_dhcp_client_errno(client, errno,
iov = IOVEC_MAKE(packet, buflen);
len = recvmsg_safe(fd, &msg, 0);
- if (IN_SET(len, -EAGAIN, -EINTR, -ENETDOWN))
- return 0;
- if (len < 0)
+ if (len < 0) {
+ if (ERRNO_IS_TRANSIENT(len) || len == -ENETDOWN)
+ return 0;
return log_dhcp_client_errno(client, len,
"Could not receive message from raw socket: %m");
-
+ }
if ((size_t) len < sizeof(DHCPPacket))
return 0;
iov = IOVEC_MAKE(message, datagram_size);
len = recvmsg_safe(fd, &msg, 0);
- if (IN_SET(len, -EAGAIN, -EINTR))
- return 0;
- if (len < 0)
+ if (len < 0) {
+ if (ERRNO_IS_TRANSIENT(len))
+ return 0;
return len;
+ }
+
if ((size_t) len < sizeof(DHCPMessage))
return 0;
len = recvmsg_safe(fd, &msg, MSG_DONTWAIT);
if (len < 0) {
/* see comment above for why we shouldn't error out on ENETDOWN. */
- if (IN_SET(len, -EAGAIN, -EINTR, -ENETDOWN))
+ if (ERRNO_IS_TRANSIENT(len) || len == -ENETDOWN)
return 0;
return log_dhcp6_client_errno(client, len, "Could not receive message from UDP socket: %m");
n = recv(fd, &packet, sizeof(struct ether_arp), 0);
if (n < 0) {
- if (IN_SET(errno, EAGAIN, EINTR))
+ if (ERRNO_IS_TRANSIENT(errno))
return 0;
log_ipv4acd_errno(acd, errno, "Failed to read ARP packet: %m");
length = recv(fd, LLDP_NEIGHBOR_RAW(n), n->raw_size, MSG_DONTWAIT);
if (length < 0) {
- if (IN_SET(errno, EAGAIN, EINTR))
+ if (ERRNO_IS_TRANSIENT(errno))
return 0;
log_lldp_rx_errno(lldp_rx, errno, "Failed to read LLDP datagram, ignoring: %m");
ss = read(fd, &x, sizeof(x));
if (ss < 0) {
- if (IN_SET(errno, EAGAIN, EINTR))
+ if (ERRNO_IS_TRANSIENT(errno))
return 0;
return -errno;
n = read(d->fd, &si, sizeof(si));
if (n < 0) {
- if (IN_SET(errno, EAGAIN, EINTR))
+ if (ERRNO_IS_TRANSIENT(errno))
return 0;
return -errno;
n = read(d->fd, &d->buffer, sizeof(d->buffer));
if (n < 0) {
- if (IN_SET(errno, EAGAIN, EINTR))
+ if (ERRNO_IS_TRANSIENT(errno))
return 0;
return -errno;
l = read(j->inotify_fd, &buffer, sizeof(buffer));
if (l < 0) {
- if (IN_SET(errno, EAGAIN, EINTR))
+ if (ERRNO_IS_TRANSIENT(errno))
return got_something ? determine_change(j) : SD_JOURNAL_NOP;
return -errno;
assert(iov);
n = recvmsg_safe(fd, &msg, MSG_TRUNC | (peek ? MSG_PEEK : 0));
- if (n == -ENOBUFS)
- return log_debug_errno(n, "sd-netlink: kernel receive buffer overrun");
- if (IN_SET(n, -EAGAIN, -EINTR))
- return 0;
- if (n < 0)
+ if (n < 0) {
+ if (n == -ENOBUFS)
+ return log_debug_errno(n, "sd-netlink: kernel receive buffer overrun");
+ if (ERRNO_IS_TRANSIENT(n))
+ return 0;
return (int) n;
+ }
if (sender.nl.nl_pid != 0) {
/* not from the kernel, ignore */
l = read(fd, &buffer, sizeof(buffer));
if (l < 0) {
- if (IN_SET(errno, EAGAIN, EINTR))
+ if (ERRNO_IS_TRANSIENT(errno))
return 0;
return -errno;
}
n = recvmsg_safe(fd, &msghdr, MSG_DONTWAIT|MSG_CMSG_CLOEXEC);
- if (IN_SET(n, -EAGAIN, -EINTR))
- return 0;
- if (n == -EXFULL) {
- log_warning("Got message with truncated control data (too many fds sent?), ignoring.");
- return 0;
- }
- if (n < 0)
+ if (n < 0) {
+ if (ERRNO_IS_TRANSIENT(n))
+ return 0;
+ if (n == -EXFULL) {
+ log_warning("Got message with truncated control data (too many fds sent?), ignoring.");
+ return 0;
+ }
return log_warning_errno(n, "Couldn't read notification socket: %m");
+ }
cmsg_close_all(&msghdr);
ssize_t ss = dns_stream_writev(s, iov, ELEMENTSOF(iov), 0);
if (ss < 0) {
- if (!IN_SET(-ss, EINTR, EAGAIN))
+ if (!ERRNO_IS_TRANSIENT(ss))
return dns_stream_complete(s, -ss);
} else {
progressed = true;
ss = dns_stream_read(s, (uint8_t*) &s->read_size + s->n_read, sizeof(s->read_size) - s->n_read);
if (ss < 0) {
- if (!IN_SET(-ss, EINTR, EAGAIN))
+ if (!ERRNO_IS_TRANSIENT(ss))
return dns_stream_complete(s, -ss);
} else if (ss == 0)
return dns_stream_complete(s, ECONNRESET);
(uint8_t*) DNS_PACKET_DATA(s->read_packet) + s->n_read - sizeof(s->read_size),
sizeof(s->read_size) + be16toh(s->read_size) - s->n_read);
if (ss < 0) {
- if (!IN_SET(-ss, EINTR, EAGAIN))
+ if (!ERRNO_IS_TRANSIENT(ss))
return dns_stream_complete(s, -ss);
} else if (ss == 0)
return dns_stream_complete(s, ECONNRESET);
iov = IOVEC_MAKE(DNS_PACKET_DATA(p), p->allocated);
l = recvmsg_safe(fd, &mh, 0);
- if (IN_SET(l, -EAGAIN, -EINTR))
- return 0;
- if (l <= 0)
+ if (l < 0) {
+ if (ERRNO_IS_TRANSIENT(l))
+ return 0;
return l;
+ }
+ if (l == 0)
+ return 0;
assert(!(mh.msg_flags & MSG_TRUNC));
k = read(fd, buffer + p, sizeof(buffer) - p);
if (k < 0) {
- if (IN_SET(errno, EINTR, EAGAIN))
+ if (ERRNO_IS_TRANSIENT(errno))
continue;
r = -errno;
goto finish;
- } else if (k == 0) {
+ }
+ if (k == 0) {
r = -EIO;
goto finish;
}
n = read(ttyfd >= 0 ? ttyfd : STDIN_FILENO, &c, 1);
if (n < 0) {
- if (IN_SET(errno, EINTR, EAGAIN))
+ if (ERRNO_IS_TRANSIENT(errno))
continue;
r = -errno;
};
n = recvmsg_safe(socket_fd, &msghdr, 0);
- if (IN_SET(n, -EAGAIN, -EINTR))
- continue;
- if (n == -EXFULL) {
- log_debug("Got message with truncated control data, ignoring.");
- continue;
- }
if (n < 0) {
+ if (ERRNO_IS_TRANSIENT(n))
+ continue;
+ if (n == -EXFULL) {
+ log_debug("Got message with truncated control data, ignoring.");
+ continue;
+ }
+
r = (int) n;
goto finish;
}
cmsg_close_all(&msghdr);
- if (n <= 0) {
+ if (n == 0) {
log_debug("Message too short");
continue;
}
#include <unistd.h>
#include "barrier.h"
+#include "errno-util.h"
#include "fd-util.h"
#include "io-util.h"
#include "macro.h"
assert(b->me >= 0);
do {
len = write(b->me, &buf, sizeof(buf));
- } while (len < 0 && IN_SET(errno, EAGAIN, EINTR));
+ } while (len < 0 && ERRNO_IS_TRANSIENT(errno));
if (len != sizeof(buf))
goto error;
/* events on @them signal new data for us */
len = read(b->them, &buf, sizeof(buf));
- if (len < 0 && IN_SET(errno, EAGAIN, EINTR))
+ if (len < 0 && ERRNO_IS_TRANSIENT(errno))
continue;
if (len != sizeof(buf))
} else if (z == 0 || ERRNO_IS_DISCONNECT(errno)) {
*from_source = sd_event_source_unref(*from_source);
*from = safe_close(*from);
- } else if (!IN_SET(errno, EAGAIN, EINTR))
+ } else if (!ERRNO_IS_TRANSIENT(errno))
return log_error_errno(errno, "Failed to splice: %m");
}
} else if (z == 0 || ERRNO_IS_DISCONNECT(errno)) {
*to_source = sd_event_source_unref(*to_source);
*to = safe_close(*to);
- } else if (!IN_SET(errno, EAGAIN, EINTR))
+ } else if (!ERRNO_IS_TRANSIENT(errno))
return log_error_errno(errno, "Failed to splice: %m");
}
} while (shoveled);
l = read(fd, &buffer, sizeof(buffer));
if (l < 0) {
- if (IN_SET(errno, EAGAIN, EINTR))
+ if (ERRNO_IS_TRANSIENT(errno))
return 0;
return log_warning_errno(errno, "Lost access to inotify: %m");
l = read(fd, &buffer, sizeof(buffer));
if (l < 0) {
- if (IN_SET(errno, EAGAIN, EINTR))
+ if (ERRNO_IS_TRANSIENT(errno))
return 1;
return log_error_errno(errno, "Failed to read inotify fd: %m");