#endif
ssize_t memcached_io_read(memcached_server_st *ptr,
- char *buffer, size_t length)
+ void *buffer, size_t length)
{
char *buffer_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;
memcached_return memcached_io_close(memcached_server_st *ptr)
{
- close(ptr->fd);
+ int r;
+ /* in case of death shutdown to avoid blocking at close() */
+
+ r= shutdown(ptr->fd, SHUT_RDWR);
+
+#ifdef HAVE_DEBUG
+ if (r && errno != ENOTCONN)
+ {
+ WATCHPOINT_ERRNO(errno);
+ WATCHPOINT_ASSERT(errno);
+ }
+#endif
+
+ r= close(ptr->fd);
+ WATCHPOINT_ASSERT(r == 0);
return MEMCACHED_SUCCESS;
}
static ssize_t io_flush(memcached_server_st *ptr,
memcached_return *error)
{
- size_t sent_length;
+ ssize_t sent_length;
size_t return_length;
char *local_write_ptr= ptr->write_buffer;
size_t write_length= ptr->write_buffer_offset;
return 0;
/* Looking for memory overflows */
+#if defined(HAVE_DEBUG)
if (write_length == MEMCACHED_MAX_BUFFER)
WATCHPOINT_ASSERT(ptr->write_buffer == local_write_ptr);
WATCHPOINT_ASSERT((ptr->write_buffer + MEMCACHED_MAX_BUFFER) >= (local_write_ptr + write_length));
+#endif
return_length= 0;
while (write_length)
}
else
{
- if ((ssize_t)(sent_length= write(ptr->fd, local_write_ptr,
+ if ((sent_length= write(ptr->fd, local_write_ptr,
write_length)) == -1)
{
switch (errno)