X-Git-Url: https://git.m6w6.name/?a=blobdiff_plain;f=lib%2Fmemcached_behavior.c;h=bf90d75ec9e3f5fd2d1d8d6e43adfa6e1630e10b;hb=b9298b65419d873299e010afa0f4eca2c8259969;hp=1095168ccf840d3d30d4f9c9ec6234c12d89cf3f;hpb=8c34786ea9d4b879bf5c5cf7ad811836f0d1f37f;p=m6w6%2Flibmemcached diff --git a/lib/memcached_behavior.c b/lib/memcached_behavior.c index 1095168c..bf90d75e 100644 --- a/lib/memcached_behavior.c +++ b/lib/memcached_behavior.c @@ -1,13 +1,71 @@ -#include +#include "common.h" +#include +#include +#include -memcached_return memcached_behavior_set(memcached_st *ptr, memcached_behavior flag) +/* + This function is used to modify the behabior of running client. + + We quit all connections so we can reset the sockets. +*/ + +memcached_return memcached_behavior_set(memcached_st *ptr, + memcached_behavior flag, + void *data) { switch (flag) { case MEMCACHED_BEHAVIOR_NO_BLOCK: - ptr->flags|= MEM_NO_BLOCK; + { + unsigned int *truefalse= (unsigned int *)data; + memcached_quit(ptr); + if (truefalse) + ptr->flags|= MEM_NO_BLOCK; + else + ptr->flags+= MEM_NO_BLOCK; + break; + } + + case MEMCACHED_BEHAVIOR_TCP_NODELAY: + { + unsigned int *truefalse= (unsigned int *)data; + memcached_quit(ptr); + if (truefalse) + ptr->flags|= MEM_TCP_NODELAY; + else + ptr->flags+= MEM_TCP_NODELAY; + break; + } + + case MEMCACHED_BEHAVIOR_MD5_HASHING: + ptr->flags+= MEM_USE_MD5; break; } return MEMCACHED_SUCCESS; } + +unsigned long long memcached_behavior_get(memcached_st *ptr, + memcached_behavior flag) +{ + switch (flag) + { + case MEMCACHED_BEHAVIOR_NO_BLOCK: + if (ptr->flags & MEM_NO_BLOCK) + return 1; + else + return 0; + case MEMCACHED_BEHAVIOR_TCP_NODELAY: + if (ptr->flags & MEM_TCP_NODELAY) + return 1; + else + return 0; + case MEMCACHED_BEHAVIOR_MD5_HASHING: + if (ptr->flags & MEM_USE_MD5) + return 1; + else + return 0; + } + + return MEMCACHED_SUCCESS; +}