Merged trunk.
[m6w6/libmemcached] / libmemcached / io.c
index 6ecac2457bb64b44dfcd8f4a94fb814e4eda89f7..dedcdaf9e9deff939b1d599255263dae8baa4d30 100644 (file)
@@ -12,8 +12,6 @@
 
 #include "common.h"
 
-#include <assert.h>
-
 typedef enum {
   MEM_READ,
   MEM_WRITE
@@ -107,6 +105,11 @@ static memcached_return_t io_wait(memcached_server_write_instance_st ptr,
   return MEMCACHED_FAILURE;
 }
 
+memcached_return_t memcached_io_wait_for_write(memcached_server_write_instance_st ptr)
+{
+  return io_wait(ptr, MEM_WRITE);
+}
+
 /**
  * Try to fill the input buffer for a server with as much
  * data as possible.
@@ -384,7 +387,6 @@ static ssize_t _io_write(memcached_server_write_instance_st ptr,
       should_write= length;
       if (ptr->write_buffer_offset + should_write > buffer_end)
       {
-        fprintf(stderr, "%s:%d (%s)\n", __FILE__, __LINE__,__func__);fflush(stdout);
         return -1;
       }
     }
@@ -427,7 +429,6 @@ static ssize_t _io_write(memcached_server_write_instance_st ptr,
     WATCHPOINT_ASSERT(ptr->fd != INVALID_SOCKET);
     if (io_flush(ptr, &rc) == -1)
     {
-      fprintf(stderr, "%s:%d (%s)\n", __FILE__, __LINE__,__func__);fflush(stdout);
       return -1;
     }
 
@@ -579,7 +580,6 @@ static ssize_t io_flush(memcached_server_write_instance_st ptr,
 
     if (rc != MEMCACHED_SUCCESS && rc != MEMCACHED_STORED)
     {
-      fprintf(stderr, "%s:%d (%s)\n", __FILE__, __LINE__,__func__);fflush(stdout);
       return -1;
     }
   }
@@ -595,7 +595,6 @@ static ssize_t io_flush(memcached_server_write_instance_st ptr,
   // 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)
   {
-    fprintf(stderr, "%s:%d (%s)\n", __FILE__, __LINE__,__func__);fflush(stdout);
     return -1;
   }
 
@@ -619,8 +618,8 @@ static ssize_t io_flush(memcached_server_write_instance_st ptr,
     if (ptr->type == MEMCACHED_CONNECTION_UDP)
       increment_udp_message_id(ptr);
 
-    assert(ptr->fd != -1);
-    sent_length= send(ptr->fd, local_write_ptr, write_length, 0);
+    WATCHPOINT_ASSERT(ptr->fd != -1);
+    sent_length= send(ptr->fd, local_write_ptr, write_length, MSG_NOSIGNAL|MSG_DONTWAIT);
     if (sent_length == SOCKET_ERROR)
     {
       ptr->cached_errno= get_socket_errno();
@@ -654,15 +653,14 @@ static ssize_t io_flush(memcached_server_write_instance_st ptr,
             continue;
 
           memcached_quit_server(ptr, true);
-          fprintf(stderr, "%s:%d (%s)\n", __FILE__, __LINE__,__func__);fflush(stdout);
           return -1;
         }
       case ENOTCONN:
       case EPIPE:
       default:
-        fprintf(stderr, "%s:%d (%s)(%s)\n", __FILE__, __LINE__,__func__, strerror(errno));fflush(stdout);
         memcached_quit_server(ptr, true);
         *error= MEMCACHED_ERRNO;
+        WATCHPOINT_ASSERT(ptr->fd == -1);
         return -1;
       }
     }
@@ -671,7 +669,6 @@ static ssize_t io_flush(memcached_server_write_instance_st ptr,
         (size_t)sent_length != write_length)
     {
       memcached_quit_server(ptr, true);
-      fprintf(stderr, "%s:%d (%s)\n", __FILE__, __LINE__,__func__);fflush(stdout);
       return -1;
     }