Skip to content

Commit

Permalink
Make redisEnableKeepAlive a no-op on AF_UNIX connections. (#1215)
Browse files Browse the repository at this point in the history
Fixes #1185
  • Loading branch information
michael-grunder authored Aug 19, 2023
1 parent 039385b commit 869f3d0
Show file tree
Hide file tree
Showing 3 changed files with 24 additions and 0 deletions.
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -7,3 +7,4 @@
/*.pc
*.dSYM
tags
compile_commands.json
4 changes: 4 additions & 0 deletions net.c
Original file line number Diff line number Diff line change
Expand Up @@ -173,6 +173,10 @@ int redisKeepAlive(redisContext *c, int interval) {
int val = 1;
redisFD fd = c->fd;

/* TCP_KEEPALIVE makes no sense with AF_UNIX connections */
if (c->connection_type == REDIS_CONN_UNIX)
return REDIS_ERR;

#ifndef _WIN32
if (setsockopt(fd, SOL_SOCKET, SO_KEEPALIVE, &val, sizeof(val)) == -1){
__redisSetError(c,REDIS_ERR_OTHER,strerror(errno));
Expand Down
19 changes: 19 additions & 0 deletions test.c
Original file line number Diff line number Diff line change
Expand Up @@ -431,6 +431,24 @@ static void test_tcp_options(struct config cfg) {
redisFree(c);
}

static void test_unix_keepalive(struct config cfg) {
redisContext *c;
redisReply *r;

c = do_connect(cfg);

test("Setting TCP_KEEPALIVE on a unix socket returns an error: ");
test_cond(redisEnableKeepAlive(c) == REDIS_ERR && c->err == 0);

test("Setting TCP_KEEPALIVE on a unix socket doesn't break the connection: ");
r = redisCommand(c, "PING");
test_cond(r != NULL && r->type == REDIS_REPLY_STATUS && r->len == 4 &&
!memcmp(r->str, "PONG", 4));
freeReplyObject(r);

redisFree(c);
}

static void test_reply_reader(void) {
redisReader *reader;
void *reply, *root;
Expand Down Expand Up @@ -2363,6 +2381,7 @@ int main(int argc, char **argv) {
test_blocking_connection_timeouts(cfg);
test_blocking_io_errors(cfg);
test_invalid_timeout_errors(cfg);
test_unix_keepalive(cfg);
if (throughput) test_throughput(cfg);
} else {
test_skipped();
Expand Down

0 comments on commit 869f3d0

Please sign in to comment.