Format changes to response.cc
[awesomized/libmemcached] / libmemcached / io.cc
index 0ed565d7e28a436e7d3bd9b26ba6598175253430..8c8c3bc7e977231ab307822244ad350141a16709 100644 (file)
@@ -268,16 +268,23 @@ static memcached_return_t io_wait(memcached_server_write_instance_st ptr,
         {
           int err;
           socklen_t len= sizeof (err);
-          (void)getsockopt(ptr->fd, SOL_SOCKET, SO_ERROR, &err, &len);
-          memcached_set_errno(*ptr, (err == 0) ? get_socket_errno() : err, MEMCACHED_AT);
+          if (getsockopt(ptr->fd, SOL_SOCKET, SO_ERROR, &err, &len) == 0)
+          {
+            if (err == 0)
+            {
+              continue;
+            }
+            errno= err;
+          }
         }
         else
         {
           memcached_set_errno(*ptr, get_socket_errno(), MEMCACHED_AT);
         }
+        int local_errno= get_socket_errno(); // We cache in case memcached_quit_server() modifies errno
         memcached_quit_server(ptr, true);
 
-        return memcached_set_errno(*ptr, get_socket_errno(), MEMCACHED_AT);
+        return memcached_set_errno(*ptr, local_errno, MEMCACHED_AT);
       }
     }
   }
@@ -306,7 +313,6 @@ static ssize_t io_flush(memcached_server_write_instance_st ptr,
       return -1;
     }
   }
-  ssize_t sent_length;
   size_t return_length;
   char *local_write_ptr= ptr->write_buffer;
   size_t write_length= ptr->write_buffer_offset;
@@ -316,14 +322,13 @@ static ssize_t io_flush(memcached_server_write_instance_st ptr,
   WATCHPOINT_ASSERT(ptr->fd != INVALID_SOCKET);
 
   // UDP Sanity check, make sure that we are not sending somthing too big
-  if (ptr->type == MEMCACHED_CONNECTION_UDP && write_length > MAX_UDP_DATAGRAM_LENGTH)
+  if (memcached_is_udp(ptr->root) and write_length > MAX_UDP_DATAGRAM_LENGTH)
   {
     *error= MEMCACHED_WRITE_FAILURE;
     return -1;
   }
 
-  if (ptr->write_buffer_offset == 0 || (ptr->type == MEMCACHED_CONNECTION_UDP
-                                        && ptr->write_buffer_offset == UDP_DATAGRAM_HEADER_LENGTH))
+  if (ptr->write_buffer_offset == 0 or (memcached_is_udp(ptr->root) and ptr->write_buffer_offset == UDP_DATAGRAM_HEADER_LENGTH))
   {
     return 0;
   }
@@ -340,18 +345,20 @@ static ssize_t io_flush(memcached_server_write_instance_st ptr,
   {
     WATCHPOINT_ASSERT(ptr->fd != INVALID_SOCKET);
     WATCHPOINT_ASSERT(write_length > 0);
-    sent_length= 0;
-    if (ptr->type == MEMCACHED_CONNECTION_UDP)
+    if (memcached_is_udp(ptr->root))
+    {
       increment_udp_message_id(ptr);
+    }
 
+    ssize_t sent_length= 0;
     WATCHPOINT_ASSERT(ptr->fd != INVALID_SOCKET);
     if (with_flush)
     {
-      sent_length= send(ptr->fd, local_write_ptr, write_length, MSG_NOSIGNAL|MSG_DONTWAIT);
+      sent_length= ::send(ptr->fd, local_write_ptr, write_length, MSG_NOSIGNAL|MSG_DONTWAIT);
     }
     else
     {
-      sent_length= send(ptr->fd, local_write_ptr, write_length, MSG_NOSIGNAL|MSG_DONTWAIT|MSG_MORE);
+      sent_length= ::send(ptr->fd, local_write_ptr, write_length, MSG_NOSIGNAL|MSG_DONTWAIT|MSG_MORE);
     }
 
     if (sent_length == SOCKET_ERROR)
@@ -376,8 +383,7 @@ static ssize_t io_flush(memcached_server_write_instance_st ptr,
            * buffer for more data and retry the write before
            * waiting..
          */
-          if (repack_input_buffer(ptr) or
-              process_input_buffer(ptr))
+          if (repack_input_buffer(ptr) or process_input_buffer(ptr))
           {
             continue;
           }
@@ -407,19 +413,18 @@ static ssize_t io_flush(memcached_server_write_instance_st ptr,
       }
     }
 
-    if (ptr->type == MEMCACHED_CONNECTION_UDP and
-        (size_t)sent_length != write_length)
+    if (memcached_is_udp(ptr->root) and size_t(sent_length) != write_length)
     {
       memcached_quit_server(ptr, true);
       *error= memcached_set_error(*ptr, MEMCACHED_WRITE_FAILURE, MEMCACHED_AT);
       return -1;
     }
 
-    ptr->io_bytes_sent += (uint32_t) sent_length;
+    ptr->io_bytes_sent+= uint32_t(sent_length);
 
     local_write_ptr+= sent_length;
-    write_length-= (uint32_t) sent_length;
-    return_length+= (uint32_t) sent_length;
+    write_length-= uint32_t(sent_length);
+    return_length+= uint32_t(sent_length);
   }
 
   WATCHPOINT_ASSERT(write_length == 0);
@@ -428,10 +433,14 @@ static ssize_t io_flush(memcached_server_write_instance_st ptr,
 
   // if we are a udp server, the begining of the buffer is reserverd for
   // the upd frame header
-  if (ptr->type == MEMCACHED_CONNECTION_UDP)
+  if (memcached_is_udp(ptr->root))
+  {
     ptr->write_buffer_offset= UDP_DATAGRAM_HEADER_LENGTH;
+  }
   else
+  {
     ptr->write_buffer_offset= 0;
+  }
 
   return (ssize_t) return_length;
 }
@@ -449,7 +458,9 @@ memcached_return_t memcached_io_read(memcached_server_write_instance_st ptr,
 
   if (ptr->fd == INVALID_SOCKET)
   {
+#if 0
     assert_msg(int(ptr->state) <= int(MEMCACHED_SERVER_STATE_ADDRINFO), "Programmer error, invalid socket state");
+#endif
     return MEMCACHED_CONNECTION_FAILURE;
   }
 
@@ -547,8 +558,8 @@ memcached_return_t memcached_io_read(memcached_server_write_instance_st ptr,
     }
   }
 
-  ptr->server_failure_counter= 0;
   *nread = (ssize_t)(buffer_ptr - (char*)buffer);
+
   return MEMCACHED_SUCCESS;
 }
 
@@ -611,13 +622,10 @@ memcached_return_t memcached_io_slurp(memcached_server_write_instance_st ptr)
 static ssize_t _io_write(memcached_server_write_instance_st ptr,
                          const void *buffer, size_t length, bool with_flush)
 {
-  size_t original_length;
-  const char* buffer_ptr;
-
   WATCHPOINT_ASSERT(ptr->fd != INVALID_SOCKET);
 
-  original_length= length;
-  buffer_ptr= static_cast<const char *>(buffer);
+  size_t original_length= length;
+  const char *buffer_ptr= static_cast<const char *>(buffer);
 
   while (length)
   {
@@ -625,7 +633,7 @@ static ssize_t _io_write(memcached_server_write_instance_st ptr,
     size_t should_write;
     size_t buffer_end;
 
-    if (ptr->type == MEMCACHED_CONNECTION_UDP)
+    if (memcached_is_udp(ptr->root))
     {
       //UDP does not support partial writes
       buffer_end= MAX_UDP_DATAGRAM_LENGTH;
@@ -648,7 +656,7 @@ static ssize_t _io_write(memcached_server_write_instance_st ptr,
     buffer_ptr+= should_write;
     length-= should_write;
 
-    if (ptr->write_buffer_offset == buffer_end && ptr->type != MEMCACHED_CONNECTION_UDP)
+    if (ptr->write_buffer_offset == buffer_end and memcached_is_udp(ptr->root) == false)
     {
       WATCHPOINT_ASSERT(ptr->fd != INVALID_SOCKET);
 
@@ -686,6 +694,18 @@ ssize_t memcached_io_write(memcached_server_write_instance_st ptr,
   return _io_write(ptr, buffer, length, with_flush);
 }
 
+size_t io_vector_total_size(libmemcached_io_vector_st* vector, const size_t number_of)
+{
+  ssize_t total= 0;
+
+  for (size_t x= 0; x < number_of; x++)
+  {
+    total+= vector->length;
+  }
+
+  return total;
+}
+
 ssize_t memcached_io_writev(memcached_server_write_instance_st ptr,
                             const struct libmemcached_io_vector_st *vector,
                             size_t number_of, bool with_flush)
@@ -696,11 +716,14 @@ ssize_t memcached_io_writev(memcached_server_write_instance_st ptr,
   {
     ssize_t returnable;
 
-    if ((returnable= _io_write(ptr, vector->buffer, vector->length, false)) == -1)
+    if (vector->length)
     {
-      return -1;
+      if ((returnable= _io_write(ptr, vector->buffer, vector->length, false)) == -1)
+      {
+        return -1;
+      }
+      total+= returnable;
     }
-    total+= returnable;
   }
 
   if (with_flush)
@@ -852,7 +875,7 @@ memcached_return_t memcached_io_readline(memcached_server_write_instance_st ptr,
   total_nr= 0;
   bool line_complete= false;
 
-  while (not line_complete)
+  while (line_complete == false)
   {
     if (ptr->read_buffer_length == 0)
     {
@@ -874,7 +897,9 @@ memcached_return_t memcached_io_readline(memcached_server_write_instance_st ptr,
       }
 
       if (*buffer_ptr == '\n')
+      {
         line_complete= true;
+      }
 
       ++buffer_ptr;
       ++total_nr;
@@ -885,7 +910,9 @@ memcached_return_t memcached_io_readline(memcached_server_write_instance_st ptr,
     {
       *buffer_ptr = *ptr->read_ptr;
       if (*buffer_ptr == '\n')
+      {
         line_complete = true;
+      }
       --ptr->read_buffer_length;
       ++ptr->read_ptr;
       ++total_nr;
@@ -893,7 +920,9 @@ memcached_return_t memcached_io_readline(memcached_server_write_instance_st ptr,
     }
 
     if (total_nr == size)
+    {
       return MEMCACHED_PROTOCOL_ERROR;
+    }
   }
 
   return MEMCACHED_SUCCESS;
@@ -902,7 +931,9 @@ memcached_return_t memcached_io_readline(memcached_server_write_instance_st ptr,
 memcached_return_t memcached_io_init_udp_header(memcached_server_write_instance_st ptr, uint16_t thread_id)
 {
   if (thread_id > UDP_REQUEST_ID_MAX_THREAD_ID)
+  {
     return MEMCACHED_FAILURE;
+  }
 
   struct udp_datagram_header_st *header= (struct udp_datagram_header_st *)ptr->write_buffer;
   header->request_id= htons((uint16_t) (generate_udp_request_thread_id(thread_id)));