Added missing constant.
authorAndre Cruz <andre@cabine.org>
Mon, 8 Mar 2010 17:23:29 +0000 (17:23 +0000)
committerAndre Cruz <andre@cabine.org>
Mon, 8 Mar 2010 17:23:29 +0000 (17:23 +0000)
Set keepalive before keepidle.

libmemcached/behavior.c
libmemcached/connect.c
libmemcached/constants.h

index e250241b3307e6a29c7bd82172e45979d3860b4f..7ca97e3a716cccb85a4deb9308f19fa50ce613e1 100644 (file)
@@ -157,6 +157,10 @@ memcached_return_t memcached_behavior_set(memcached_st *ptr,
     ptr->recv_size= (int32_t)data;
     memcached_quit(ptr);
     break;
+  case MEMCACHED_BEHAVIOR_TCP_KEEPIDLE:
+    ptr->tcp_keepidle= (uint32_t)data;
+    memcached_quit(ptr);
+    break;
   case MEMCACHED_BEHAVIOR_USER_DATA:
     return MEMCACHED_FAILURE;
   case MEMCACHED_BEHAVIOR_HASH_WITH_PREFIX_KEY:
@@ -292,6 +296,8 @@ uint64_t memcached_behavior_get(memcached_st *ptr,
     return (uint64_t)ptr->snd_timeout;
   case MEMCACHED_BEHAVIOR_RCV_TIMEOUT:
     return (uint64_t)ptr->rcv_timeout;
+  case MEMCACHED_BEHAVIOR_TCP_KEEPIDLE:
+    return (uint64_t)ptr->tcp_keepidle;
   case MEMCACHED_BEHAVIOR_SOCKET_SEND_SIZE:
     {
       int sock_size= 0;
index 67ceacab7a252312fb8095338d9b878ed7c621bb..da72c8e379350cec1100196e2e05e66ad1eb0b66 100644 (file)
@@ -85,20 +85,6 @@ static memcached_return_t set_socket_options(memcached_server_st *ptr)
   }
 #endif
 
-#ifdef TCP_KEEPIDLE
-  if (ptr->root->tcp_keepidle)
-  {
-    int flag= 1;
-    int error;
-
-    error= setsockopt(ptr->fd, IPPROTO_TCP, TCP_KEEPIDLE,
-                      &flag, (socklen_t)sizeof(int));
-    WATCHPOINT_ASSERT(error == 0);
-    if (error)
-      return MEMCACHED_FAILURE;
-  }
-#endif
-
   if (ptr->root->flags.no_block)
   {
     int error;
@@ -137,6 +123,19 @@ static memcached_return_t set_socket_options(memcached_server_st *ptr)
       return MEMCACHED_FAILURE;
   }
 
+#ifdef TCP_KEEPIDLE
+  if (ptr->root->tcp_keepidle > 0)
+  {
+    int error;
+
+    error= setsockopt(ptr->fd, IPPROTO_TCP, TCP_KEEPIDLE,
+                      &ptr->root->tcp_keepidle, (socklen_t)sizeof(int));
+    WATCHPOINT_ASSERT(error == 0);
+    if (error)
+      return MEMCACHED_FAILURE;
+  }
+#endif
+
   if (ptr->root->send_size > 0)
   {
     int error;
index 6405df29180819b0dabdddec0e8670cacaa0f40a..b215b328da01473a2ab7a6e693ac59c78b465d92 100644 (file)
@@ -116,6 +116,7 @@ typedef enum {
   MEMCACHED_BEHAVIOR_RANDOMIZE_REPLICA_READ,
   MEMCACHED_BEHAVIOR_CORK,
   MEMCACHED_BEHAVIOR_TCP_KEEPALIVE,
+  MEMCACHED_BEHAVIOR_TCP_KEEPIDLE,
   MEMCACHED_BEHAVIOR_MAX
 } memcached_behavior_t;