From 4f82cec1974e9ca4f0200ef7554c8e37adff62f3 Mon Sep 17 00:00:00 2001 From: Frediano Ziglio Date: Wed, 15 Apr 2020 20:50:56 +0100 Subject: [PATCH] Fix compatibility with ENOTSUP and Darwin Darwin uses also the constant EOPNOTSUPP for the same reasons. In some versions EOPNOTSUPP is defined as ENOTSUP. Check both values, not only ENOTSUP. Signed-off-by: Frediano Ziglio --- server/net-utils.c | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/server/net-utils.c b/server/net-utils.c index 32ceb3b8..f0aecc3d 100644 --- a/server/net-utils.c +++ b/server/net-utils.c @@ -39,6 +39,12 @@ #define TCP_KEEPIDLE TCP_KEEPALIVE #endif +#if defined(EOPNOTSUPP) && EOPNOTSUPP != ENOTSUP +#define NOTSUP_ERROR(err) ((err) == ENOTSUP || (err) == EOPNOTSUPP) +#else +#define NOTSUP_ERROR(err) ((err) == ENOTSUP) +#endif + /** * red_socket_set_keepalive: * @fd: a socket file descriptor @@ -51,7 +57,7 @@ bool red_socket_set_keepalive(int fd, bool enable, int timeout) int keepalive = !!enable; if (setsockopt(fd, SOL_SOCKET, SO_KEEPALIVE, &keepalive, sizeof(keepalive)) == -1) { - if (errno != ENOTSUP) { + if (!NOTSUP_ERROR(errno)) { g_warning("setsockopt for keepalive failed, %s", strerror(errno)); return false; } @@ -63,7 +69,7 @@ bool red_socket_set_keepalive(int fd, bool enable, int timeout) #ifdef TCP_KEEPIDLE if (setsockopt(fd, IPPROTO_TCP, TCP_KEEPIDLE, &timeout, sizeof(timeout)) == -1) { - if (errno != ENOTSUP) { + if (!NOTSUP_ERROR(errno)) { g_warning("setsockopt for keepalive timeout failed, %s", strerror(errno)); return false; } @@ -86,7 +92,7 @@ bool red_socket_set_no_delay(int fd, bool no_delay) if (setsockopt(fd, IPPROTO_TCP, TCP_NODELAY, &optval, sizeof(optval)) != 0) { - if (errno != ENOTSUP && errno != ENOPROTOOPT) { + if (!NOTSUP_ERROR(errno) && errno != ENOPROTOOPT) { spice_warning("setsockopt failed, %s", strerror(errno)); return false; }