X-Git-Url: https://git.m6w6.name/?a=blobdiff_plain;f=libmemcached%2Fmemcached_io.c;h=ea8b25816d9d981fce5f4d40cc29f3cc0a84be2f;hb=f859a9f36f4eb8df12faea8005b26eb75b1265d6;hp=b9261f3d9bc4ef27540f5799e702a538032aca31;hpb=26c1a71921b1468d56f6edaa7e6e3855ec1c879f;p=m6w6%2Flibmemcached diff --git a/libmemcached/memcached_io.c b/libmemcached/memcached_io.c index b9261f3d..ea8b2581 100644 --- a/libmemcached/memcached_io.c +++ b/libmemcached/memcached_io.c @@ -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; }