X-Git-Url: https://git.m6w6.name/?a=blobdiff_plain;ds=sidebyside;f=lib%2Fmemcached_get.c;h=a18854506d4743b9fb7d404786adbd16434c34e1;hb=1a40985723774c7155e8f3c038ed737b9b6121c4;hp=ffecba29b9a45535260dae71d4cc94f4fb91ce1b;hpb=1f34771f7ba527e3afb675f1a448d6c5ab66596b;p=m6w6%2Flibmemcached diff --git a/lib/memcached_get.c b/lib/memcached_get.c index ffecba29..a1885450 100644 --- a/lib/memcached_get.c +++ b/lib/memcached_get.c @@ -8,23 +8,29 @@ char *memcached_get(memcached_st *ptr, char *key, size_t key_length, size_t send_length; char buffer[MEMCACHED_DEFAULT_COMMAND_SIZE]; char *string_ptr; + unsigned int server_key; + *value_length= 0; *error= memcached_connect(ptr); + if (*error != MEMCACHED_SUCCESS) + return NULL; + + server_key= memcached_generate_hash(key, key_length) % ptr->number_of_hosts; + send_length= snprintf(buffer, MEMCACHED_DEFAULT_COMMAND_SIZE, "get %.*s\r\n", - key_length, key); + (int)key_length, key); if (*error != MEMCACHED_SUCCESS) return NULL; - if ((send(ptr->fd, buffer, send_length, 0) == -1)) + if ((write(ptr->hosts[server_key].fd, buffer, send_length) == -1)) { - fprintf(stderr, "failed fetch on %.*s TCP\n", key_length+1, key); *error= MEMCACHED_WRITE_FAILURE; return NULL; } memset(buffer, 0, MEMCACHED_DEFAULT_COMMAND_SIZE); - *error= memcached_response(ptr, buffer, MEMCACHED_DEFAULT_COMMAND_SIZE); + *error= memcached_response(ptr, buffer, MEMCACHED_DEFAULT_COMMAND_SIZE, server_key); if (*error == MEMCACHED_SUCCESS) { @@ -76,7 +82,7 @@ char *memcached_get(memcached_st *ptr, char *key, size_t key_length, need_to_read= *value_length - need_to_copy; - read_length= read(ptr->fd, pos_ptr, need_to_read); + read_length= read(ptr->hosts[server_key].fd, pos_ptr, need_to_read); if (read_length != need_to_read) { free(value);