X-Git-Url: https://git.m6w6.name/?a=blobdiff_plain;f=libmemcached%2Finstance.hpp;h=63bf0835e58b937f39c473f835cf3427a306f78c;hb=32eebdc2e1ae14f41bb15e212036b772760a3fd1;hp=fba02b2f4da0f2be1afb39fe5fe5b1f70b8cbb69;hpb=76bf27c007d5015d3dcf2981c942d8afb2e97302;p=awesomized%2Flibmemcached diff --git a/libmemcached/instance.hpp b/libmemcached/instance.hpp index fba02b2f..63bf0835 100644 --- a/libmemcached/instance.hpp +++ b/libmemcached/instance.hpp @@ -2,7 +2,7 @@ * * Libmemcached library * - * Copyright (C) 2012 Data Differential, http://datadifferential.com/ + * Copyright (C) 2012-2013 Data Differential, http://datadifferential.com/ * All rights reserved. * * Redistribution and use in source and binary forms, with or without @@ -56,11 +56,10 @@ # define MEMCACHED_NI_MAXSERV 32 #endif -namespace org { -namespace libmemcached { +#include "libmemcached/string.hpp" // @todo Complete class transformation -struct Instance { +struct memcached_instance_st { in_port_t port() const { return port_; @@ -74,6 +73,7 @@ struct Instance { void mark_server_as_clean() { server_failure_counter= 0; + server_timeout_counter= 0; next_retry= 0; } @@ -85,17 +85,62 @@ struct Instance { { } + bool valid() const; + + bool is_shutting_down() const; + + void start_close_socket(); + void close_socket(); + void reset_socket(); + uint32_t response_count() const { return cursor_active_; } struct { - bool is_allocated:1; - bool is_initialized:1; - bool is_shutting_down:1; - bool is_dead:1; + bool is_allocated; + bool is_initialized; + bool is_shutting_down; + bool is_dead; + bool ready; } options; + + short _events; + short _revents; + + short events(void) + { + return _events; + } + + short revents(void) + { + return _revents; + } + + const char* hostname() + { + return _hostname; + } + + void hostname(const memcached_string_t& hostname_) + { + if (hostname_.size) + { + memcpy(_hostname, hostname_.c_str, hostname_.size); + _hostname[hostname_.size]= 0; + } + else + { + memcpy(_hostname, memcached_literal_param("localhost")); + _hostname[memcached_literal_param_size("localhost")]= 0; + } + } + + void events(short); + void revents(short); + uint32_t cursor_active_; in_port_t port_; memcached_socket_t fd; @@ -103,6 +148,8 @@ struct Instance { uint32_t request_id; uint32_t server_failure_counter; uint64_t server_failure_counter_query_id; + uint32_t server_timeout_counter; + uint64_t server_timeout_counter_query_id; uint32_t weight; uint32_t version; enum memcached_server_state_t state; @@ -118,7 +165,6 @@ struct Instance { memcached_connection_t type; char *read_ptr; size_t read_buffer_length; - size_t read_data_length; size_t write_buffer_offset; struct addrinfo *address_info; struct addrinfo *address_info_next; @@ -128,19 +174,26 @@ struct Instance { struct memcached_error_t *error_messages; char read_buffer[MEMCACHED_MAX_BUFFER]; char write_buffer[MEMCACHED_MAX_BUFFER]; - char hostname[MEMCACHED_NI_MAXHOST]; -}; + char _hostname[MEMCACHED_NI_MAXHOST]; -} // namespace libmemcached -} // namespace org + void clear_addrinfo() + { + if (address_info) + { + freeaddrinfo(address_info); + address_info= NULL; + address_info_next= NULL; + } + } +}; -org::libmemcached::Instance* __instance_create_with(memcached_st *memc, - org::libmemcached::Instance* self, - const memcached_string_t& hostname, - const in_port_t port, - uint32_t weight, - const memcached_connection_t type); +memcached_instance_st* __instance_create_with(memcached_st *memc, + memcached_instance_st* self, + const memcached_string_t& _hostname, + const in_port_t port, + uint32_t weight, + const memcached_connection_t type); -memcached_return_t memcached_instance_push(memcached_st *ptr, const org::libmemcached::Instance*, uint32_t); +memcached_return_t memcached_instance_push(memcached_st *ptr, const memcached_instance_st*, uint32_t); -void __instance_free(org::libmemcached::Instance *); +void __instance_free(memcached_instance_st *);