summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAllen.Dou <allen.dou@hotmail.com>2013-04-30 00:11:57 +0800
committerAllen.Dou <allen.dou@hotmail.com>2013-04-30 00:11:57 +0800
commit9dff5105fc01f52437d862bc95d40415f03179f0 (patch)
treedde4f7f32e4ed911654696dc30fe518617a1608d
parent8d5bc445e53ad4114aaac1dd4ff438b638aecede (diff)
Make KeepAlive optional
Make Connection KeepAlive being optional instead of default.
-rw-r--r--hiredis.c7
-rw-r--r--hiredis.h1
-rw-r--r--net.c9
-rw-r--r--net.h1
4 files changed, 12 insertions, 6 deletions
diff --git a/hiredis.c b/hiredis.c
index 958f58b..84baa8c 100644
--- a/hiredis.c
+++ b/hiredis.c
@@ -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.
*
diff --git a/hiredis.h b/hiredis.h
index a861761..42290a1 100644
--- a/hiredis.h
+++ b/hiredis.h
@@ -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);
diff --git a/net.c b/net.c
index 57557cd..bf571fc 100644
--- a/net.c
+++ b/net.c
@@ -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;
diff --git a/net.h b/net.h
index eb8a0a1..36096fe 100644
--- a/net.h
+++ b/net.h
@@ -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