Merge in fixes for SASL.
[m6w6/libmemcached] / libmemcached / connect.cc
index 7044306e6908cfe864fedb4835084c170a2900c0..3c12339c4a7f16315fc134e88aeff8d5840c63a8 100644 (file)
@@ -131,7 +131,7 @@ static memcached_return_t set_hostinfo(memcached_server_st *server)
 
   char str_port[NI_MAXSERV];
   int length= snprintf(str_port, NI_MAXSERV, "%u", (uint32_t)server->port);
-  if (length >= NI_MAXSERV || length < 0)
+  if (length >= NI_MAXSERV or length < 0)
   {
     return MEMCACHED_FAILURE;
   }
@@ -446,7 +446,7 @@ static memcached_return_t network_connect(memcached_server_st *ptr)
     if ((connect(ptr->fd, ptr->address_info_next->ai_addr, ptr->address_info_next->ai_addrlen) != SOCKET_ERROR))
     {
       ptr->state= MEMCACHED_SERVER_STATE_CONNECTED;
-      break; // Success
+      return MEMCACHED_SUCCESS;
     }
 
     /* An error occurred */
@@ -590,35 +590,27 @@ memcached_return_t memcached_connect(memcached_server_write_instance_st ptr)
   /* We need to clean up the multi startup piece */
   switch (ptr->type)
   {
-  case MEMCACHED_CONNECTION_UNKNOWN:
-    WATCHPOINT_ASSERT(0);
-    rc= MEMCACHED_NOT_SUPPORTED;
-    break;
-
   case MEMCACHED_CONNECTION_UDP:
   case MEMCACHED_CONNECTION_TCP:
     rc= network_connect(ptr);
-#ifdef LIBMEMCACHED_WITH_SASL_SUPPORT
-    if (ptr->fd != INVALID_SOCKET and ptr->root->sasl.callbacks)
+    if (LIBMEMCACHED_WITH_SASL_SUPPORT)
     {
-      rc= memcached_sasl_authenticate_connection(ptr);
-      if (memcached_failed(rc) and ptr->fd != INVALID_SOCKET)
+      if (ptr->fd != INVALID_SOCKET and ptr->root->sasl.callbacks)
       {
-        WATCHPOINT_ASSERT(ptr->fd != INVALID_SOCKET);
-        (void)closesocket(ptr->fd);
-        ptr->fd= INVALID_SOCKET;
+        rc= memcached_sasl_authenticate_connection(ptr);
+        if (memcached_failed(rc) and ptr->fd != INVALID_SOCKET)
+        {
+          WATCHPOINT_ASSERT(ptr->fd != INVALID_SOCKET);
+          (void)closesocket(ptr->fd);
+          ptr->fd= INVALID_SOCKET;
+        }
       }
     }
-#endif
     break;
 
   case MEMCACHED_CONNECTION_UNIX_SOCKET:
     rc= unix_socket_connect(ptr);
     break;
-
-  case MEMCACHED_CONNECTION_MAX:
-  default:
-    WATCHPOINT_ASSERT(0);
   }
 
   if (memcached_success(rc))
@@ -626,6 +618,11 @@ memcached_return_t memcached_connect(memcached_server_write_instance_st ptr)
     ptr->server_failure_counter= 0;
     ptr->next_retry= 0;
   }
+  else if (memcached_has_current_error(*ptr))
+  {
+    ptr->server_failure_counter++;
+    set_last_disconnected_host(ptr);
+  }
   else
   {
     memcached_set_error(*ptr, rc, MEMCACHED_AT);