X-Git-Url: https://git.m6w6.name/?a=blobdiff_plain;ds=sidebyside;f=libmemcached%2Fconnect.cc;h=5e6c77f568a44b07c2dcc68ecb4e9163a2eee5fa;hb=9fd31c03436acf24c593dc3a77c905eb137ef570;hp=707f7344387af9fbe1661387294d1de7c01a6a94;hpb=805884743f76a5c4dad8ad20e6033630a92e71df;p=awesomized%2Flibmemcached diff --git a/libmemcached/connect.cc b/libmemcached/connect.cc index 707f7344..5e6c77f5 100644 --- a/libmemcached/connect.cc +++ b/libmemcached/connect.cc @@ -49,18 +49,14 @@ static memcached_return_t connect_poll(memcached_server_st *ptr) size_t loop_max= 5; - while (--loop_max) // Should only loop on cases of ERESTART or EINTR + if (ptr->root->poll_timeout == 0) { - int error; - if (ptr->root->poll_timeout) - { - error= poll(fds, 1, ptr->root->connect_timeout); - } - else - { - error= 0; - } + return memcached_set_error(*ptr, MEMCACHED_TIMEOUT, MEMCACHED_AT); + } + while (--loop_max) // Should only loop on cases of ERESTART or EINTR + { + int error= poll(fds, 1, ptr->root->connect_timeout); switch (error) { case 1: @@ -112,6 +108,7 @@ static memcached_return_t connect_poll(memcached_server_st *ptr) ptr->cached_errno= get_socket_errno(); } + WATCHPOINT_ASSERT(ptr->fd != INVALID_SOCKET); (void)closesocket(ptr->fd); ptr->fd= INVALID_SOCKET; ptr->state= MEMCACHED_SERVER_STATE_NEW; @@ -127,7 +124,7 @@ static memcached_return_t connect_poll(memcached_server_st *ptr) static memcached_return_t set_hostinfo(memcached_server_st *server) { - assert(! server->address_info); // We cover the case where a programming mistake has been made. + WATCHPOINT_ASSERT(not server->address_info); // We cover the case where a programming mistake has been made. if (server->address_info) { freeaddrinfo(server->address_info); @@ -178,7 +175,7 @@ static memcached_return_t set_hostinfo(memcached_server_st *server) default: { WATCHPOINT_STRING(server->hostname); - WATCHPOINT_STRING(gai_strerror(e)); + WATCHPOINT_STRING(gai_strerror(errcode)); return memcached_set_error(*server, MEMCACHED_HOST_LOOKUP_FAILURE, MEMCACHED_AT, memcached_string_make_from_cstr(gai_strerror(errcode))); } } @@ -482,15 +479,16 @@ static memcached_return_t network_connect(memcached_server_st *ptr) break; case EINTR: // Special case, we retry ai_addr + WATCHPOINT_ASSERT(ptr->fd != INVALID_SOCKET); (void)closesocket(ptr->fd); ptr->fd= INVALID_SOCKET; - ptr->state= MEMCACHED_SERVER_STATE_NEW; continue; default: break; } + WATCHPOINT_ASSERT(ptr->fd != INVALID_SOCKET); (void)closesocket(ptr->fd); ptr->fd= INVALID_SOCKET; ptr->address_info_next= ptr->address_info_next->ai_next; @@ -592,11 +590,12 @@ memcached_return_t memcached_connect(memcached_server_write_instance_st ptr) case MEMCACHED_CONNECTION_TCP: rc= network_connect(ptr); #ifdef LIBMEMCACHED_WITH_SASL_SUPPORT - if (ptr->fd != INVALID_SOCKET && ptr->root->sasl.callbacks) + if (ptr->fd != INVALID_SOCKET and ptr->root->sasl.callbacks) { rc= memcached_sasl_authenticate_connection(ptr); - if (memcached_failed(rc)) + if (memcached_failed(rc) and ptr->fd != INVALID_SOCKET) { + WATCHPOINT_ASSERT(ptr->fd != INVALID_SOCKET); (void)closesocket(ptr->fd); ptr->fd= INVALID_SOCKET; }