X-Git-Url: https://git.m6w6.name/?a=blobdiff_plain;f=libmemcached%2Fserver.cc;h=e2837c7d03c84e2f43248db2bfa5892375564227;hb=1899ec2a3d1f4f180b0109879a966fd6603ece86;hp=8d9e9bbd175e87aeab2db814edf35a8f1c2e8c0c;hpb=999006a8904a0f08293f1df7bda81bff914b091a;p=awesomized%2Flibmemcached diff --git a/libmemcached/server.cc b/libmemcached/server.cc index 8d9e9bbd..e2837c7d 100644 --- a/libmemcached/server.cc +++ b/libmemcached/server.cc @@ -40,7 +40,7 @@ */ #include -static inline void _server_init(memcached_server_st *self, memcached_st *root, +static inline void _server_init(memcached_server_st *self, Memcached *root, const memcached_string_t& hostname, in_port_t port, uint32_t weight, memcached_connection_t type) @@ -50,11 +50,12 @@ static inline void _server_init(memcached_server_st *self, memcached_st *root, self->number_of_hosts= 0; self->cursor_active= 0; self->port= port; - self->fd= INVALID_SOCKET; self->io_bytes_sent= 0; self->request_id= 0; self->server_failure_counter= 0; self->server_failure_counter_query_id= 0; + self->server_timeout_counter= 0; + self->server_timeout_counter_query_id= 0; self->weight= weight ? weight : 1; // 1 is the default weight value self->io_wait_count.read= 0; self->io_wait_count.write= 0; @@ -65,12 +66,6 @@ static inline void _server_init(memcached_server_st *self, memcached_st *root, self->minor_version= UINT8_MAX; self->type= type; self->error_messages= NULL; - self->read_ptr= self->read_buffer; - self->read_buffer_length= 0; - self->read_data_length= 0; - self->write_buffer_offset= 0; - self->address_info= NULL; - self->address_info_next= NULL; self->state= MEMCACHED_SERVER_STATE_NEW; self->next_retry= 0; @@ -89,7 +84,7 @@ static inline void _server_init(memcached_server_st *self, memcached_st *root, self->hostname[hostname.size]= 0; } -static memcached_server_st *_server_create(memcached_server_st *self, const memcached_st *memc) +static memcached_server_st *_server_create(memcached_server_st *self, const Memcached *memc) { if (self == NULL) { @@ -112,8 +107,8 @@ static memcached_server_st *_server_create(memcached_server_st *self, const memc return self; } -memcached_server_st *__server_create_with(memcached_st *memc, - memcached_server_st* self, +memcached_server_st *__server_create_with(Memcached *memc, + memcached_server_st* allocated_instance, const memcached_string_t& hostname, const in_port_t port, uint32_t weight, @@ -125,16 +120,16 @@ memcached_server_st *__server_create_with(memcached_st *memc, return NULL; } - self= _server_create(self, memc); + allocated_instance= _server_create(allocated_instance, memc); - if (self == NULL) + if (allocated_instance == NULL) { return NULL; } - _server_init(self, const_cast(memc), hostname, port, weight, type); + _server_init(allocated_instance, const_cast(memc), hostname, port, weight, type); - return self; + return allocated_instance; } void __server_free(memcached_server_st *self) @@ -198,16 +193,18 @@ uint32_t memcached_server_count(const memcached_st *self) return self->number_of_hosts; } -const char *memcached_server_name(const memcached_server_instance_st self) +const char *memcached_server_name(const memcached_instance_st * self) { WATCHPOINT_ASSERT(self); - if (self == NULL) - return NULL; + if (self) + { + return self->_hostname; + } - return self->hostname; + return NULL; } -in_port_t memcached_server_port(const memcached_server_instance_st self) +in_port_t memcached_server_port(const memcached_instance_st * self) { WATCHPOINT_ASSERT(self); if (self == NULL) @@ -215,10 +212,28 @@ in_port_t memcached_server_port(const memcached_server_instance_st self) return 0; } - return self->port; + return self->port(); +} + +in_port_t memcached_server_srcport(const memcached_instance_st * self) +{ + WATCHPOINT_ASSERT(self); + if (self == NULL || self->fd == INVALID_SOCKET || (self->type != MEMCACHED_CONNECTION_TCP && self->type != MEMCACHED_CONNECTION_UDP)) + { + return 0; + } + + struct sockaddr_in sin; + socklen_t addrlen= sizeof(sin); + if (getsockname(self->fd, (struct sockaddr*)&sin, &addrlen) != -1) + { + return ntohs(sin.sin_port); + } + + return -1; } -uint32_t memcached_server_response_count(const memcached_server_instance_st self) +uint32_t memcached_server_response_count(const memcached_instance_st * self) { WATCHPOINT_ASSERT(self); if (self == NULL) @@ -226,10 +241,10 @@ uint32_t memcached_server_response_count(const memcached_server_instance_st self return 0; } - return self->cursor_active; + return self->cursor_active_; } -const char *memcached_server_type(const memcached_server_instance_st ptr) +const char *memcached_server_type(const memcached_instance_st * ptr) { if (ptr) { @@ -249,7 +264,7 @@ const char *memcached_server_type(const memcached_server_instance_st ptr) return "UNKNOWN"; } -uint8_t memcached_server_major_version(const memcached_server_instance_st instance) +uint8_t memcached_server_major_version(const memcached_instance_st * instance) { if (instance) { @@ -259,7 +274,7 @@ uint8_t memcached_server_major_version(const memcached_server_instance_st instan return UINT8_MAX; } -uint8_t memcached_server_minor_version(const memcached_server_instance_st instance) +uint8_t memcached_server_minor_version(const memcached_instance_st * instance) { if (instance) { @@ -269,7 +284,7 @@ uint8_t memcached_server_minor_version(const memcached_server_instance_st instan return UINT8_MAX; } -uint8_t memcached_server_micro_version(const memcached_server_instance_st instance) +uint8_t memcached_server_micro_version(const memcached_instance_st * instance) { if (instance) {