Forgot to update version number.
[m6w6/libmemcached] / libmemcached / memcached_io.c
index b9261f3d9bc4ef27540f5799e702a538032aca31..ea8b25816d9d981fce5f4d40cc29f3cc0a84be2f 100644 (file)
@@ -75,7 +75,7 @@ void memcached_io_preread(memcached_st *ptr)
 #endif
 
 ssize_t memcached_io_read(memcached_server_st *ptr,
-                          char *buffer, size_t length)
+                          void *buffer, size_t length)
 {
   char *buffer_ptr;
 
@@ -154,14 +154,14 @@ ssize_t memcached_io_read(memcached_server_st *ptr,
       break;
   }
 
-  return (size_t)(buffer_ptr - buffer);
+  return (size_t)(buffer_ptr - (char*)buffer);
 }
 
 ssize_t memcached_io_write(memcached_server_st *ptr,
-                           char *buffer, size_t length, char with_flush)
+                           const void *buffer, size_t length, char with_flush)
 {
   size_t original_length;
-  char* buffer_ptr;
+  const char* buffer_ptr;
 
   original_length= length;
   buffer_ptr= buffer;
@@ -204,9 +204,14 @@ ssize_t memcached_io_write(memcached_server_st *ptr,
   return original_length;
 }
 
-memcached_return memcached_io_close(memcached_server_st *ptr)
+memcached_return memcached_io_close(memcached_server_st *ptr, uint8_t io_death)
 {
-  close(ptr->fd);
+  /* in case of death shutdown to avoid blocking at close() */
+
+  if (io_death)
+    shutdown(ptr->fd, SHUT_RDWR);
+  else
+    close(ptr->fd);
 
   return MEMCACHED_SUCCESS;
 }