1 /* vim:expandtab:shiftwidth=2:tabstop=2:smarttab: 2 * 3 * Libmemcached library 4 * 5 * Copyright (C) 2011 Data Differential, http://datadifferential.com/ 6 * All rights reserved. 7 * 8 * Redistribution and use in source and binary forms, with or without 9 * modification, are permitted provided that the following conditions are 10 * met: 11 * 12 * * Redistributions of source code must retain the above copyright 13 * notice, this list of conditions and the following disclaimer. 14 * 15 * * Redistributions in binary form must reproduce the above 16 * copyright notice, this list of conditions and the following disclaimer 17 * in the documentation and/or other materials provided with the 18 * distribution. 19 * 20 * * The names of its contributors may not be used to endorse or 21 * promote products derived from this software without specific prior 22 * written permission. 23 * 24 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 25 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 26 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 27 * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 28 * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 29 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 30 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 31 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 32 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 33 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 34 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 35 * 36 */ 37 38 39 #pragma once 40 41 #ifdef HAVE_NETDB_H 42 # include <netdb.h> 43 #endif 44 45 #ifdef NI_MAXHOST 46 # define MEMCACHED_NI_MAXHOST NI_MAXHOST 47 #else 48 # define MEMCACHED_NI_MAXHOST 1025 49 #endif 50 51 #ifdef NI_MAXSERV 52 # define MEMCACHED_NI_MAXSERV NI_MAXSERV 53 #else 54 # define MEMCACHED_NI_MAXSERV 32 55 #endif 56 57 enum memcached_server_state_t { 58 MEMCACHED_SERVER_STATE_NEW, // fd == -1, no address lookup has been done 59 MEMCACHED_SERVER_STATE_ADDRINFO, // ADDRRESS information has been gathered 60 MEMCACHED_SERVER_STATE_IN_PROGRESS, 61 MEMCACHED_SERVER_STATE_CONNECTED, 62 MEMCACHED_SERVER_STATE_IN_TIMEOUT, 63 MEMCACHED_SERVER_STATE_DISABLED 64 }; 65 66 struct memcached_server_st { 67 struct { 68 bool is_allocated:1; 69 bool is_initialized:1; 70 bool is_shutting_down:1; 71 bool is_dead:1; 72 } options; 73 uint32_t number_of_hosts; 74 uint32_t cursor_active; 75 in_port_t port; 76 uint32_t io_bytes_sent; /* # bytes sent since last read */ 77 uint32_t request_id; 78 uint32_t server_failure_counter; 79 uint64_t server_failure_counter_query_id; 80 uint32_t server_timeout_counter; 81 uint64_t server_timeout_counter_query_id; 82 uint32_t weight; 83 uint32_t version; 84 enum memcached_server_state_t state; 85 struct { 86 uint32_t read; 87 uint32_t write; 88 uint32_t timeouts; 89 size_t _bytes_read; 90 } io_wait_count; 91 uint8_t major_version; // Default definition of UINT8_MAX means that it has not been set. 92 uint8_t micro_version; // ditto, and note that this is the third, not second version bit 93 uint8_t minor_version; // ditto 94 memcached_connection_t type; 95 time_t next_retry; 96 struct memcached_st *root; 97 uint64_t limit_maxbytes; 98 struct memcached_error_t *error_messages; 99 char hostname[MEMCACHED_NI_MAXHOST]; 100 }; 101