无法使用libmemcached模块

时间:2018-03-19 12:59:44

标签: c memcached libmemcached libmemcache

我正在用 libmemcached / memcached.h 编写一个Memcached UDP客户端,以便在Memcached服务器上发送一些任意负载。我可以在UDP中发送设置请求,但我无法发送获取请求,这是我为此编写的代码段!

#include <stdio.h>
#include <string.h>
#include <unistd.h>
#include <libmemcached/memcached.h>
#include <time.h>
#include <assert.h>
#include <stdlib.h>
#include <math.h>
#include <signal.h>

int main(int argc, char *argv[])
{
  memcached_server_st *servers = NULL;
  memcached_st *memc;
  memcached_return rc;
  char * res;



  char *key= "kay";
  int size = 1000;
  char * value = malloc(size);
  uint32_t flags;
  size_t return_value_length;
  char * ip = argv[2];

  memset(value, 1, size);
  memc = memcached_create(NULL);
  servers= memcached_server_list_append(servers, ip, 11211, &rc);
  rc = memcached_server_push(memc, servers);
  memcached_behavior_set(memc, MEMCACHED_BEHAVIOR_USE_UDP, (uint64_t)1);

  rc = memcached_set(memc, key, strlen(key), value, strlen(value), (time_t)0, (uint32_t)0);

  if (rc == MEMCACHED_SUCCESS)
    fprintf(stderr,"Key stored successfully\n");
  else
    fprintf(stderr,"Couldn't store key: %s\n",memcached_strerror(memc, rc));


  while ( true)  
  {
    res = memcached_get(memc, key, strlen(key), &return_value_length, &flags, &rc);  
    free(res);
    if(rc != MEMCACHED_SUCCESS)
    {
      fprintf(stderr, "%s\n", memcached_strerror(memc, rc));
    }
  }

  memcached_free(memc);

  return 0;

实际上,获取请求总是不成功!我还使用 Wireshark 监控数据包,客户端甚至不会将任何数据包发送到服务器!它在发送获取请求时失败了。

代码中是否有任何明显的问题我无法看到?

谢谢

1 个答案:

答案 0 :(得分:0)

根据memcached_behaviour_set()

的联机帮助页
  

以下操作将在返回MEMCACHED_NOT_SUPPORTED时返回   在启用MEMCACHED_BEHAVIOR_USE_UDP的情况下执行:

     

memcached_version(),memcached_stat(), memcached_get(),   memcached_get_by_key(),memcached_mget(),memcached_mget_by_key(),   memcached_fetch(),memcached_fetch_result(),   memcached_fetch_execute()。

实际上,当memcached-handle设置为UDP传输时,memcached_get()会工作。你必须使用TCP。