X-Git-Url: https://git.m6w6.name/?a=blobdiff_plain;f=lib%2Fmemcached_io.c;h=8615aa6e13eb38c0433bba15e95fab12a4473ceb;hb=81be4de01a86e73b9222f7e92d0a6f7476029864;hp=7067237ffd6f72ecc47317f7fdb74d90a056c585;hpb=cf34e0d38a58e81ec3993af0db6c221585d712e5;p=m6w6%2Flibmemcached diff --git a/lib/memcached_io.c b/lib/memcached_io.c index 7067237f..8615aa6e 100644 --- a/lib/memcached_io.c +++ b/lib/memcached_io.c @@ -4,9 +4,55 @@ #include -ssize_t memcached_io_read(memcached_st *ptr, char *buf, size_t length) +ssize_t memcached_io_read(memcached_st *ptr, unsigned int server_key, + char *buffer, size_t length) { - return -1; + size_t x; + char *buffer_ptr; + + buffer_ptr= buffer; + + for (x= 0, buffer_ptr= buffer; + x < length; x++) + { + if (!ptr->read_buffer_length) + { + if (length > 1) + { + + size_t data_read; + data_read= recv(ptr->hosts[server_key].fd, + buffer_ptr, + length - x, 0); + if (data_read == -1) + return -1; + if (data_read == 0) + return x; + + data_read+= x; + + return data_read; + } + else + { + ptr->read_buffer_length= recv(ptr->hosts[server_key].fd, + ptr->read_buffer, + MEMCACHED_MAX_BUFFER, 0); + ptr->read_ptr= ptr->read_buffer; + } + + if (ptr->read_buffer_length == -1) + return -1; + if (ptr->read_buffer_length == 0) + return x; + } + *buffer_ptr= *ptr->read_ptr; + buffer_ptr++; + ptr->read_ptr++; + ptr->read_buffer_length--; + } + + return length; } ssize_t memcached_io_write(memcached_st *ptr, unsigned int server_key,