diff options
Diffstat (limited to 'databases/valkey8/files/patch-deps-hiredis-net.c')
| -rw-r--r-- | databases/valkey8/files/patch-deps-hiredis-net.c | 39 | 
1 files changed, 39 insertions, 0 deletions
| diff --git a/databases/valkey8/files/patch-deps-hiredis-net.c b/databases/valkey8/files/patch-deps-hiredis-net.c new file mode 100644 index 000000000000..434ebf0e81a4 --- /dev/null +++ b/databases/valkey8/files/patch-deps-hiredis-net.c @@ -0,0 +1,39 @@ +--- deps/hiredis/net.c.orig	2024-04-01 02:56:24 UTC ++++ deps/hiredis/net.c +@@ -185,14 +185,34 @@ int redisKeepAlive(redisContext *c, int interval) { +         __redisSetError(c,REDIS_ERR_OTHER,strerror(errno)); +         return REDIS_ERR; +     } +-#else +-#if defined(__GLIBC__) && !defined(__FreeBSD_kernel__) ++#elif defined(__GLIBC__) +     if (setsockopt(fd, IPPROTO_TCP, TCP_KEEPIDLE, &val, sizeof(val)) < 0) { +         __redisSetError(c,REDIS_ERR_OTHER,strerror(errno)); +         return REDIS_ERR; +     } +  +     val = interval/3; ++    if (val == 0) val = 1; ++    if (setsockopt(fd, IPPROTO_TCP, TCP_KEEPINTVL, &val, sizeof(val)) < 0) { ++        __redisSetError(c,REDIS_ERR_OTHER,strerror(errno)); ++        return REDIS_ERR; ++    } ++ ++    val = 3; ++    if (setsockopt(fd, IPPROTO_TCP, TCP_KEEPCNT, &val, sizeof(val)) < 0) { ++        __redisSetError(c,REDIS_ERR_OTHER,strerror(errno)); ++        return REDIS_ERR; ++    } ++#else ++#if !defined(__sun) && defined(TCP_KEEPIDLE) && defined(TCP_KEEPINTL) && \ ++    defined(TCP_KEEPCNT) ++    val = interval; ++    if (setsockopt(fd, IPPROTO_TCP, TCP_KEEPIDLE, &val, sizeof(val)) < 0) { ++        __redisSetError(c,REDIS_ERR_OTHER,strerror(errno)); ++        return REDIS_ERR; ++    } ++ ++    val = internal/3; +     if (val == 0) val = 1; +     if (setsockopt(fd, IPPROTO_TCP, TCP_KEEPINTVL, &val, sizeof(val)) < 0) { +         __redisSetError(c,REDIS_ERR_OTHER,strerror(errno)); | 
