X-Git-Url: https://git.m6w6.name/?a=blobdiff_plain;f=lib%2Fmemcached_response.c;h=33dc0b1e5bfd41d9c28bb41d061028ab313fa619;hb=05a0de51880aa6ee2428a365ef5d6ad530f96454;hp=956107932615034853f4d12748137f052e759e40;hpb=6dab216a486ce3c5cb9a041f91bedb88afc8515a;p=awesomized%2Flibmemcached diff --git a/lib/memcached_response.c b/lib/memcached_response.c index 95610793..33dc0b1e 100644 --- a/lib/memcached_response.c +++ b/lib/memcached_response.c @@ -19,6 +19,16 @@ memcached_return memcached_response(memcached_server_st *ptr, send_length= 0; + /* UDP at the moment is odd...*/ + if (ptr->type == MEMCACHED_CONNECTION_UDP) + { + char buffer[8]; + ssize_t read_length; + + return MEMCACHED_SUCCESS; + + read_length= memcached_io_read(ptr, buffer, 8); + } /* We may have old commands in the buffer not set, first purge */ if (ptr->root->flags & MEM_NO_BLOCK) @@ -30,6 +40,7 @@ memcached_return memcached_response(memcached_server_st *ptr, size_t total_length= 0; buffer_ptr= buffer; + while (1) { ssize_t read_length; @@ -38,7 +49,10 @@ memcached_return memcached_response(memcached_server_st *ptr, WATCHPOINT_ASSERT(isgraph(*buffer_ptr) || isspace(*buffer_ptr)); if (read_length != 1) + { + memcached_io_reset(ptr); return MEMCACHED_UNKNOWN_READ_FAILURE; + } if (*buffer_ptr == '\n') break; @@ -49,7 +63,10 @@ memcached_return memcached_response(memcached_server_st *ptr, WATCHPOINT_ASSERT(total_length <= buffer_length); if (total_length >= buffer_length) + { + memcached_io_reset(ptr); return MEMCACHED_PROTOCOL_ERROR; + } } buffer_ptr++; *buffer_ptr= 0; @@ -81,6 +98,7 @@ memcached_return memcached_response(memcached_server_st *ptr, { WATCHPOINT_STRING(buffer); WATCHPOINT_ASSERT(0); + memcached_io_reset(ptr); return MEMCACHED_UNKNOWN_READ_FAILURE; } case 'O': /* OK */ @@ -100,6 +118,7 @@ memcached_return memcached_response(memcached_server_st *ptr, { WATCHPOINT_STRING(buffer); WATCHPOINT_ASSERT(0); + memcached_io_reset(ptr); return MEMCACHED_UNKNOWN_READ_FAILURE; } } @@ -112,20 +131,31 @@ memcached_return memcached_response(memcached_server_st *ptr, else if (buffer[4] == 'S') return MEMCACHED_NOTSTORED; else + { + memcached_io_reset(ptr); return MEMCACHED_UNKNOWN_READ_FAILURE; + } } case 'E': /* PROTOCOL ERROR or END */ { if (buffer[1] == 'N') return MEMCACHED_END; else if (buffer[1] == 'R') + { + memcached_io_reset(ptr); return MEMCACHED_PROTOCOL_ERROR; + } else + { + memcached_io_reset(ptr); return MEMCACHED_UNKNOWN_READ_FAILURE; + } } case 'C': /* CLIENT ERROR */ + memcached_io_reset(ptr); return MEMCACHED_CLIENT_ERROR; default: + memcached_io_reset(ptr); return MEMCACHED_UNKNOWN_READ_FAILURE; }