Modified test to allow it to run on slow machines (aka it ran too long)
[m6w6/libmemcached] / lib / memcached_connect.c
index 116423cea9d98ce926f94684fb84e758a24f7aba..8ffaaef9fb91057e5c3f6ee1c8aba8c9368ccbdc 100644 (file)
@@ -13,6 +13,9 @@ memcached_return memcached_real_connect(memcached_st *ptr, unsigned int server_k
 
   if (ptr->hosts[server_key].fd == -1)
   {
+    /* Old connection junk still is in the structure */
+    WATCHPOINT_ASSERT(ptr->hosts[server_key].stack_responses == 0);
+
     if ((h= gethostbyname(ptr->hosts[server_key].hostname)) == NULL)
     {
       ptr->my_errno= h_errno;
@@ -30,7 +33,6 @@ memcached_return memcached_real_connect(memcached_st *ptr, unsigned int server_k
       return MEMCACHED_CONNECTION_SOCKET_CREATE_FAILURE;
     }
 
-
     /* bind any port number */
     localAddr.sin_family = AF_INET;
     localAddr.sin_addr.s_addr = htonl(INADDR_ANY);
@@ -54,6 +56,18 @@ memcached_return memcached_real_connect(memcached_st *ptr, unsigned int server_k
                  &flag, (socklen_t)sizeof(int));
     }
 
+    if (ptr->send_size)
+    {
+      setsockopt(ptr->hosts[server_key].fd, SOL_SOCKET, SO_SNDBUF, 
+                 &ptr->send_size, (socklen_t)sizeof(int));
+    }
+
+    if (ptr->recv_size)
+    {
+      setsockopt(ptr->hosts[server_key].fd, SOL_SOCKET, SO_SNDBUF, 
+                 &ptr->recv_size, (socklen_t)sizeof(int));
+    }
+
     /* connect to server */
 test_connect:
     if (connect(ptr->hosts[server_key].fd, (struct sockaddr *) &servAddr, sizeof(servAddr)) < 0)
@@ -72,6 +86,7 @@ test_connect:
       }
       ptr->connected++;
     }
+    WATCHPOINT_ASSERT(ptr->hosts[server_key].stack_responses == 0);
   }
 
   return MEMCACHED_SUCCESS;
@@ -80,7 +95,7 @@ test_connect:
 
 memcached_return memcached_connect(memcached_st *ptr, unsigned int server_key)
 {
-  memcached_return rc;
+  memcached_return rc= MEMCACHED_NO_SERVERS;
   LIBMEMCACHED_MEMCACHED_CONNECT_START();
 
   if (ptr->connected == ptr->number_of_hosts)
@@ -97,7 +112,15 @@ memcached_return memcached_connect(memcached_st *ptr, unsigned int server_key)
     unsigned int x;
 
     for (x= 0; x < ptr->number_of_hosts; x++)
-      rc= memcached_real_connect(ptr, x);
+    {
+      memcached_return possible_rc;
+
+      possible_rc= memcached_real_connect(ptr, x);
+      rc= MEMCACHED_SUCCESS;
+
+      if (possible_rc != MEMCACHED_SUCCESS)
+        rc= MEMCACHED_SOME_ERRORS;
+    }
   }
   LIBMEMCACHED_MEMCACHED_CONNECT_END();