X-Git-Url: https://git.m6w6.name/?a=blobdiff_plain;f=lib%2Fmemcached_response.c;h=5b0b7831cd8b7fef75d43e806cfa0c30393bde90;hb=f580e35770a744c60cb92e1cd581944d9da72205;hp=cb74be0a911c6f1fe9ba383299de8c5f668ca199;hpb=e69bb33d8da40ded7f7a58a321b9f220b6651c8c;p=awesomized%2Flibmemcached diff --git a/lib/memcached_response.c b/lib/memcached_response.c index cb74be0a..5b0b7831 100644 --- a/lib/memcached_response.c +++ b/lib/memcached_response.c @@ -6,31 +6,39 @@ */ #include "common.h" +#include "memcached_io.h" memcached_return memcached_response(memcached_st *ptr, char *buffer, size_t buffer_length, unsigned int server_key) { + unsigned int x; size_t send_length; char *buffer_ptr; memset(buffer, 0, buffer_length); send_length= 0; - buffer_ptr= buffer; - while (1) + for (x= 0; x <= ptr->stack_responses; x++) { - unsigned int read_length; - read_length= recv(ptr->hosts[server_key].fd, buffer_ptr, 1, 0); + buffer_ptr= buffer; + while (1) + { + unsigned int read_length; + + read_length= memcached_io_read(ptr, server_key, + buffer_ptr, 1); - if (read_length != 1) - return MEMCACHED_UNKNOWN_READ_FAILURE; + if (read_length != 1) + return MEMCACHED_UNKNOWN_READ_FAILURE; - if (*buffer_ptr == '\n') - break; - else - buffer_ptr++; + if (*buffer_ptr == '\n') + break; + else + buffer_ptr++; + } } + ptr->stack_responses= 0; switch(buffer[0]) { @@ -40,10 +48,12 @@ memcached_return memcached_response(memcached_st *ptr, return MEMCACHED_SUCCESS; case 'S': /* STORED STATS SERVER_ERROR */ { - if (buffer[1] == 'T') /* STORED STATS */ - return MEMCACHED_SUCCESS; + if (buffer[2] == 'A') /* STORED STATS */ + return MEMCACHED_STAT; else if (buffer[1] == 'E') return MEMCACHED_SERVER_ERROR; + else if (buffer[1] == 'T') + return MEMCACHED_STORED; else return MEMCACHED_UNKNOWN_READ_FAILURE; }