diff options
author | Allen.Dou <allen.dou@hotmail.com> | 2013-04-30 00:11:57 +0800 |
---|---|---|
committer | Allen.Dou <allen.dou@hotmail.com> | 2013-04-30 00:11:57 +0800 |
commit | 9dff5105fc01f52437d862bc95d40415f03179f0 (patch) | |
tree | dde4f7f32e4ed911654696dc30fe518617a1608d | |
parent | 8d5bc445e53ad4114aaac1dd4ff438b638aecede (diff) |
Make KeepAlive optional
Make Connection KeepAlive being optional instead of default.
-rw-r--r-- | hiredis.c | 7 | ||||
-rw-r--r-- | hiredis.h | 1 | ||||
-rw-r--r-- | net.c | 9 | ||||
-rw-r--r-- | net.h | 1 |
4 files changed, 12 insertions, 6 deletions
@@ -1092,6 +1092,13 @@ int redisSetTimeout(redisContext *c, struct timeval tv) { return REDIS_ERR; } +/* Enable connection KeepAlive. */ +int redisEnableKeepAlive(redisContext *c) { + if (redisKeepAlive(c, REDIS_KEEPALIVE_INTERVAL) != REDIS_OK) + return REDIS_ERR; + return REDIS_OK; +} + /* Use this function to handle a read event on the descriptor. It will try * and read some bytes from the socket and feed them to the reply parser. * @@ -179,6 +179,7 @@ redisContext *redisConnectUnix(const char *path); redisContext *redisConnectUnixWithTimeout(const char *path, struct timeval tv); redisContext *redisConnectUnixNonBlock(const char *path); int redisSetTimeout(redisContext *c, struct timeval tv); +int redisEnableKeepAlive(redisContext *c); void redisFree(redisContext *c); int redisBufferRead(redisContext *c); int redisBufferWrite(redisContext *c, int *done); @@ -113,9 +113,10 @@ static int redisSetBlocking(redisContext *c, int fd, int blocking) { return REDIS_OK; } -static int redisKeepAlive(redisContext *c,int fd,int interval) { +int redisKeepAlive(redisContext *c, int interval) { int val = 1; - + int fd = c->fd; + if (setsockopt(fd, SOL_SOCKET, SO_KEEPALIVE, &val, sizeof(val)) == -1){ __redisSetError(c,REDIS_ERR_OTHER,strerror(errno)); return REDIS_ERR; @@ -143,8 +144,6 @@ static int redisKeepAlive(redisContext *c,int fd,int interval) { return REDIS_OK; } - - static int redisSetTcpNoDelay(redisContext *c, int fd) { int yes = 1; if (setsockopt(fd, IPPROTO_TCP, TCP_NODELAY, &yes, sizeof(yes)) == -1) { @@ -273,8 +272,6 @@ int redisContextConnectTcp(redisContext *c, const char *addr, int port, struct t goto error; if (redisSetTcpNoDelay(c,s) != REDIS_OK) goto error; - if (redisKeepAlive(c,s,REDIS_KEEPALIVE_INTERVAL) != REDIS_OK) - goto error; c->fd = s; c->flags |= REDIS_CONNECTED; @@ -43,5 +43,6 @@ int redisCheckSocketError(redisContext *c, int fd); int redisContextSetTimeout(redisContext *c, struct timeval tv); int redisContextConnectTcp(redisContext *c, const char *addr, int port, struct timeval *timeout); int redisContextConnectUnix(redisContext *c, const char *path, struct timeval *timeout); +int redisKeepAlive(redisContext *c, int interval); #endif |