Merge Thomason's cork patch.
[awesomized/libmemcached] / libmemcached / connect.c
index 98ef44d5eedae2b076117ca1798eda79572a9a01..6d08eb709065f35b02303e209ac666316a8e7950 100644 (file)
@@ -10,7 +10,7 @@ static memcached_return_t set_hostinfo(memcached_server_st *server)
   int e;
   char str_port[NI_MAXSERV];
 
-  sprintf(str_port, "%u", server->port);
+  snprintf(str_port, NI_MAXSERV, "%u", (uint32_t)server->port);
 
   memset(&hints, 0, sizeof(hints));
 
@@ -63,6 +63,8 @@ static memcached_return_t set_socket_options(memcached_server_st *ptr)
     error= setsockopt(ptr->fd, SOL_SOCKET, SO_SNDTIMEO,
                       &waittime, (socklen_t)sizeof(struct timeval));
     WATCHPOINT_ASSERT(error == 0);
+    if (error)
+      return MEMCACHED_FAILURE;
   }
 #endif
 
@@ -78,6 +80,8 @@ static memcached_return_t set_socket_options(memcached_server_st *ptr)
     error= setsockopt(ptr->fd, SOL_SOCKET, SO_RCVTIMEO,
                       &waittime, (socklen_t)sizeof(struct timeval));
     WATCHPOINT_ASSERT(error == 0);
+    if (error)
+      return MEMCACHED_FAILURE;
   }
 #endif
 
@@ -91,6 +95,8 @@ static memcached_return_t set_socket_options(memcached_server_st *ptr)
     error= setsockopt(ptr->fd, SOL_SOCKET, SO_LINGER,
                       &linger, (socklen_t)sizeof(struct linger));
     WATCHPOINT_ASSERT(error == 0);
+    if (error)
+      return MEMCACHED_FAILURE;
   }
 
   if (ptr->root->flags.tcp_nodelay)
@@ -101,24 +107,30 @@ static memcached_return_t set_socket_options(memcached_server_st *ptr)
     error= setsockopt(ptr->fd, IPPROTO_TCP, TCP_NODELAY,
                       &flag, (socklen_t)sizeof(int));
     WATCHPOINT_ASSERT(error == 0);
+    if (error)
+      return MEMCACHED_FAILURE;
   }
 
-  if (ptr->root->send_size)
+  if (ptr->root->send_size > 0)
   {
     int error;
 
     error= setsockopt(ptr->fd, SOL_SOCKET, SO_SNDBUF,
                       &ptr->root->send_size, (socklen_t)sizeof(int));
     WATCHPOINT_ASSERT(error == 0);
+    if (error)
+      return MEMCACHED_FAILURE;
   }
 
-  if (ptr->root->recv_size)
+  if (ptr->root->recv_size > 0)
   {
     int error;
 
     error= setsockopt(ptr->fd, SOL_SOCKET, SO_RCVBUF,
                       &ptr->root->recv_size, (socklen_t)sizeof(int));
     WATCHPOINT_ASSERT(error == 0);
+    if (error)
+      return MEMCACHED_FAILURE;
   }
 
   /* libmemcached will always use nonblocking IO to avoid write deadlocks */
@@ -129,7 +141,9 @@ static memcached_return_t set_socket_options(memcached_server_st *ptr)
   while (flags == -1 && (errno == EINTR || errno == EAGAIN));
 
   unlikely (flags == -1)
+  {
     return MEMCACHED_CONNECTION_FAILURE;
+  }
   else if ((flags & O_NONBLOCK) == 0)
   {
     int rval;
@@ -139,7 +153,9 @@ static memcached_return_t set_socket_options(memcached_server_st *ptr)
     while (rval == -1 && (errno == EINTR || errno == EAGAIN));
 
     unlikely (rval == -1)
+    {
       return MEMCACHED_CONNECTION_FAILURE;
+    }
   }
 
   return MEMCACHED_SUCCESS;
@@ -148,7 +164,6 @@ static memcached_return_t set_socket_options(memcached_server_st *ptr)
 static memcached_return_t unix_socket_connect(memcached_server_st *ptr)
 {
   struct sockaddr_un servAddr;
-  socklen_t addrlen;
 
   if (ptr->fd == -1)
   {
@@ -162,8 +177,6 @@ static memcached_return_t unix_socket_connect(memcached_server_st *ptr)
     servAddr.sun_family= AF_UNIX;
     strcpy(servAddr.sun_path, ptr->hostname); /* Copy filename */
 
-    addrlen= (socklen_t) (strlen(servAddr.sun_path) + sizeof(servAddr.sun_family));
-
 test_connect:
     if (connect(ptr->fd,
                 (struct sockaddr *)&servAddr,
@@ -195,7 +208,9 @@ static memcached_return_t network_connect(memcached_server_st *ptr)
   {
     struct addrinfo *use;
 
-    if (!ptr->sockaddr_inited ||
+    WATCHPOINT_ASSERT(ptr->cursor_active == 0);
+
+    if (! ptr->options.sockaddr_inited ||
         (!(ptr->root->flags.use_cache_lookups)))
     {
       memcached_return_t rc;
@@ -203,7 +218,7 @@ static memcached_return_t network_connect(memcached_server_st *ptr)
       rc= set_hostinfo(ptr);
       if (rc != MEMCACHED_SUCCESS)
         return rc;
-      ptr->sockaddr_inited= true;
+      ptr->options.sockaddr_inited= true;
     }
 
     use= ptr->address_info;
@@ -269,7 +284,6 @@ static memcached_return_t network_connect(memcached_server_st *ptr)
 
       if (ptr->fd != -1)
       {
-        WATCHPOINT_ASSERT(ptr->cursor_active == 0);
         ptr->server_failure_counter= 0;
         return MEMCACHED_SUCCESS;
       }