X-Git-Url: https://git.m6w6.name/?a=blobdiff_plain;f=libmemcached%2Fserver.hpp;h=351b34be02260bcae879bd47dc5b919e5fdb4585;hb=c6e2eddc3a033d9e382846f1771a9cb0bcc0cba7;hp=05b51f4fcbf098fbdda139b7a2f96a8f4b9c55d5;hpb=27ee6d2aea6210eaca004475600aba78b7170883;p=awesomized%2Flibmemcached diff --git a/libmemcached/server.hpp b/libmemcached/server.hpp index 05b51f4f..351b34be 100644 --- a/libmemcached/server.hpp +++ b/libmemcached/server.hpp @@ -37,17 +37,61 @@ #pragma once -#include +#ifdef HAVE_SYS_TIME_H +#include +#endif + +#include + +memcached_server_st *__server_create_with(memcached_st *memc, + memcached_server_st* self, + const memcached_string_t& hostname, + const in_port_t port, + uint32_t weight, + const memcached_connection_t type); + +memcached_return_t memcached_server_add_parsed(memcached_st *ptr, + const char *hostname, + size_t hostname_length, + in_port_t port, + uint32_t weight); + +void __server_free(memcached_server_st *); static inline bool memcached_is_valid_servername(const memcached_string_t& arg) { - return arg.size > 0 or arg.size < NI_MAXHOST; + return (arg.c_str != NULL or arg.size == 0) and arg.size < NI_MAXHOST; +} + +static inline bool memcached_is_valid_filename(const memcached_string_t& arg) +{ + return arg.c_str != NULL and arg.size > 0 and arg.size < NI_MAXHOST; } -LIBMEMCACHED_LOCAL - memcached_server_st *__server_create_with(memcached_st *memc, - memcached_server_write_instance_st host, - const memcached_string_t& hostname, - const in_port_t port, - uint32_t weight, - const memcached_connection_t type); +void memcached_instance_free(org::libmemcached::Instance *); + +void set_last_disconnected_host(org::libmemcached::Instance* self); + +static inline void memcached_mark_server_for_timeout(org::libmemcached::Instance* server) +{ + if (server->state != MEMCACHED_SERVER_STATE_IN_TIMEOUT) + { + struct timeval next_time; + if (gettimeofday(&next_time, NULL) == 0) + { + server->next_retry= next_time.tv_sec +server->root->retry_timeout; + } + else + { + server->next_retry= 1; // Setting the value to 1 causes the timeout to occur immediatly + } + + server->state= MEMCACHED_SERVER_STATE_IN_TIMEOUT; + if (server->server_failure_counter_query_id != server->root->query_id) + { + server->server_failure_counter++; + server->server_failure_counter_query_id= server->root->query_id; + } + set_last_disconnected_host(server); + } +}