无法使用 libmemcached 模块向 memcached 服务器发送 UDP get 请求
Unable to send UDP get request to memcached server with libmemcached module
我正在使用 libmemcached/memcached.h 编写 Memcached UDP 客户端,以在 Memcached 服务器上发送一些任意负载。我可以在 UDP 中发送 set 请求,但我无法发送 get 请求,这是我为此编写的代码片段!
#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;
其实get请求总是不成功!!!我还用 Wireshark 监控了数据包,客户端甚至没有向服务器发送任何数据包!它在发送 get 请求时失败了。
代码中是否存在我看不到的明显问题?
谢谢
根据 memcached_behaviour_set()
的联机帮助页:
The following operations will return MEMCACHED_NOT_SUPPORTED when
executed with the MEMCACHED_BEHAVIOR_USE_UDP enabled:
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。
我正在使用 libmemcached/memcached.h 编写 Memcached UDP 客户端,以在 Memcached 服务器上发送一些任意负载。我可以在 UDP 中发送 set 请求,但我无法发送 get 请求,这是我为此编写的代码片段!
#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;
其实get请求总是不成功!!!我还用 Wireshark 监控了数据包,客户端甚至没有向服务器发送任何数据包!它在发送 get 请求时失败了。
代码中是否存在我看不到的明显问题?
谢谢
根据 memcached_behaviour_set()
的联机帮助页:
The following operations will return MEMCACHED_NOT_SUPPORTED when executed with the MEMCACHED_BEHAVIOR_USE_UDP enabled:
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。