X-Git-Url: https://git.m6w6.name/?a=blobdiff_plain;f=libmemcached%2Fconnect.cc;h=90d3facb06728f24edc3ac7effa8004c1684c2ff;hb=9f7b73d459c70cbed3bbc29b1fef626eb4cf6f3c;hp=1d95fd45b5bd65d75640485fded0862e02e93b1e;hpb=d676720d31be78bad7a986b2ead885d2e3ecc27b;p=m6w6%2Flibmemcached diff --git a/libmemcached/connect.cc b/libmemcached/connect.cc index 1d95fd45..90d3facb 100644 --- a/libmemcached/connect.cc +++ b/libmemcached/connect.cc @@ -37,9 +37,9 @@ #include -#include +#include +#include #include -#include static memcached_return_t connect_poll(memcached_server_st *ptr) { @@ -152,24 +152,22 @@ static memcached_return_t set_hostinfo(memcached_server_st *server) break; case EAI_AGAIN: - return memcached_set_error_string(*server, MEMCACHED_TIMEOUT, gai_strerror(errcode), strlen(gai_strerror(errcode))); + return memcached_set_error(*server, MEMCACHED_TIMEOUT, MEMCACHED_AT, memcached_string_make_from_cstr(gai_strerror(errcode))); case EAI_SYSTEM: - { - static memcached_string_t mesg= { memcached_literal_param("getaddrinfo") }; - return memcached_set_errno(*server, errno, &mesg); - } + return memcached_set_errno(*server, errno, MEMCACHED_AT, memcached_literal_param("getaddrinfo(EAI_SYSTEM)")); + case EAI_BADFLAGS: - return memcached_set_error_string(*server, MEMCACHED_INVALID_ARGUMENTS, memcached_literal_param("getaddrinfo(EAI_BADFLAGS)")); + return memcached_set_error(*server, MEMCACHED_INVALID_ARGUMENTS, MEMCACHED_AT, memcached_literal_param("getaddrinfo(EAI_BADFLAGS)")); case EAI_MEMORY: - return memcached_set_error_string(*server, MEMCACHED_ERRNO, memcached_literal_param("getaddrinfo(EAI_MEMORY)")); + return memcached_set_error(*server, MEMCACHED_ERRNO, MEMCACHED_AT, memcached_literal_param("getaddrinfo(EAI_MEMORY)")); default: { WATCHPOINT_STRING(server->hostname); WATCHPOINT_STRING(gai_strerror(e)); - return memcached_set_error_string(*server, MEMCACHED_HOST_LOOKUP_FAILURE, gai_strerror(errcode), strlen(gai_strerror(errcode))); + return memcached_set_error(*server, MEMCACHED_HOST_LOOKUP_FAILURE, MEMCACHED_AT, memcached_string_make_from_cstr(gai_strerror(errcode))); } } server->address_info_next= server->address_info; @@ -358,8 +356,7 @@ static memcached_return_t unix_socket_connect(memcached_server_st *ptr) if ((ptr->fd= socket(AF_UNIX, SOCK_STREAM, 0)) < 0) { - ptr->cached_errno= errno; - return MEMCACHED_CONNECTION_SOCKET_CREATE_FAILURE; + return memcached_set_errno(*ptr, errno, NULL); } struct sockaddr_un servAddr; @@ -388,7 +385,7 @@ test_connect: } } - WATCHPOINT_ASSERT(ptr->fd != -1); + WATCHPOINT_ASSERT(ptr->fd != INVALID_SOCKET); return MEMCACHED_SUCCESS; #else @@ -441,9 +438,7 @@ static memcached_return_t network_connect(memcached_server_st *ptr) ptr->address_info_next->ai_socktype, ptr->address_info_next->ai_protocol)) < 0) { - ptr->cached_errno= get_socket_errno(); - WATCHPOINT_ERRNO(get_socket_errno()); - return MEMCACHED_CONNECTION_SOCKET_CREATE_FAILURE; + return memcached_set_errno(*ptr, get_socket_errno(), NULL); } (void)set_socket_options(ptr); @@ -510,19 +505,18 @@ static memcached_return_t network_connect(memcached_server_st *ptr) return MEMCACHED_SUCCESS; /* The last error should be from connect() */ } -void set_last_disconnected_host(memcached_server_write_instance_st ptr) +void set_last_disconnected_host(memcached_server_write_instance_st self) { // const_cast - memcached_st *root= (memcached_st *)ptr->root; + memcached_st *root= (memcached_st *)self->root; #if 0 - WATCHPOINT_STRING(ptr->hostname); - WATCHPOINT_NUMBER(ptr->port); - WATCHPOINT_ERRNO(ptr->cached_errno); + WATCHPOINT_STRING(self->hostname); + WATCHPOINT_NUMBER(self->port); + WATCHPOINT_ERRNO(self->cached_errno); #endif - if (root->last_disconnected_server) - memcached_server_free(root->last_disconnected_server); - root->last_disconnected_server= memcached_server_clone(NULL, ptr); + memcached_server_free(root->last_disconnected_server); + root->last_disconnected_server= memcached_server_clone(NULL, self); } memcached_return_t memcached_connect(memcached_server_write_instance_st ptr) @@ -575,6 +569,7 @@ memcached_return_t memcached_connect(memcached_server_write_instance_st ptr) WATCHPOINT_ASSERT(0); rc= MEMCACHED_NOT_SUPPORTED; break; + case MEMCACHED_CONNECTION_UDP: case MEMCACHED_CONNECTION_TCP: rc= network_connect(ptr); @@ -582,7 +577,7 @@ memcached_return_t memcached_connect(memcached_server_write_instance_st ptr) if (ptr->fd != INVALID_SOCKET && ptr->root->sasl.callbacks) { rc= memcached_sasl_authenticate_connection(ptr); - if (rc != MEMCACHED_SUCCESS) + if (memcached_failed(rc)) { (void)closesocket(ptr->fd); ptr->fd= INVALID_SOCKET; @@ -590,15 +585,17 @@ memcached_return_t memcached_connect(memcached_server_write_instance_st ptr) } #endif break; + case MEMCACHED_CONNECTION_UNIX_SOCKET: rc= unix_socket_connect(ptr); break; + case MEMCACHED_CONNECTION_MAX: default: WATCHPOINT_ASSERT(0); } - if (rc == MEMCACHED_SUCCESS) + if (memcached_success(rc)) { ptr->server_failure_counter= 0; ptr->next_retry= 0;