summaryrefslogtreecommitdiff
path: root/src/basic/errno-util.h
diff options
context:
space:
mode:
authorYu Watanabe <watanabe.yu+github@gmail.com>2021-11-30 03:39:35 +0900
committerYu Watanabe <watanabe.yu+github@gmail.com>2021-11-30 23:06:43 +0900
commit7aad83580fccee926d903bdb1a2a6af2c40ef0fc (patch)
tree86b5e3ead66baaa433b53de9f8b3b88e1ab1598b /src/basic/errno-util.h
parent16edfadc6773265967be37b63ab6ce00f8b49157 (diff)
downloadsystemd-7aad83580fccee926d903bdb1a2a6af2c40ef0fc.tar.gz
errno-util: introduce ERRNO_IS_TRANSIENT()
Diffstat (limited to 'src/basic/errno-util.h')
-rw-r--r--src/basic/errno-util.h13
1 files changed, 9 insertions, 4 deletions
diff --git a/src/basic/errno-util.h b/src/basic/errno-util.h
index 8cd7de5bc8..09abf0b751 100644
--- a/src/basic/errno-util.h
+++ b/src/basic/errno-util.h
@@ -70,6 +70,13 @@ static inline int errno_or_else(int fallback) {
return -abs(fallback);
}
+/* For send()/recv() or read()/write(). */
+static inline bool ERRNO_IS_TRANSIENT(int r) {
+ return IN_SET(abs(r),
+ EAGAIN,
+ EINTR);
+}
+
/* Hint #1: ENETUNREACH happens if we try to connect to "non-existing" special IP addresses, such as ::5.
*
* Hint #2: The kernel sends e.g., EHOSTUNREACH or ENONET to userspace in some ICMP error cases. See the
@@ -100,10 +107,8 @@ static inline bool ERRNO_IS_DISCONNECT(int r) {
* the accept(2) man page. */
static inline bool ERRNO_IS_ACCEPT_AGAIN(int r) {
return ERRNO_IS_DISCONNECT(r) ||
- IN_SET(abs(r),
- EAGAIN,
- EINTR,
- EOPNOTSUPP);
+ ERRNO_IS_TRANSIENT(r) ||
+ abs(r) == EOPNOTSUPP;
}
/* Resource exhaustion, could be our fault or general system trouble */