X-Git-Url: https://git.m6w6.name/?a=blobdiff_plain;ds=sidebyside;f=libmemcached%2Fconnect.cc;h=1c4ea913689ca54b513d7a8ded2660c9ca13100a;hb=3e87de62b0b39279bdec62a07b45e42fe798fd41;hp=589c40c51dd06fff0f9230a18eaf4e768e42dade;hpb=f0ec3e2ffaf483bbd1329e8c6aba37f729e6df4f;p=m6w6%2Flibmemcached diff --git a/libmemcached/connect.cc b/libmemcached/connect.cc index 589c40c5..1c4ea913 100644 --- a/libmemcached/connect.cc +++ b/libmemcached/connect.cc @@ -400,9 +400,13 @@ static memcached_return_t network_connect(memcached_server_st *server) WATCHPOINT_ASSERT(server->fd == INVALID_SOCKET); WATCHPOINT_ASSERT(server->cursor_active == 0); + /* + We want to check both of these because if address_info_next has been fully tried, we want to do a new lookup to make sure we have picked up on any new DNS information. + */ if (server->address_info == NULL or server->address_info_next == NULL) { WATCHPOINT_ASSERT(server->state == MEMCACHED_SERVER_STATE_NEW); + server->address_info_next= NULL; memcached_return_t rc; uint32_t counter= 5; while (--counter) @@ -428,6 +432,12 @@ static memcached_return_t network_connect(memcached_server_st *server) } } + if (server->address_info_next == NULL) + { + server->address_info_next= server->address_info; + server->state= MEMCACHED_SERVER_STATE_ADDRINFO; + } + /* Create the socket */ while (server->address_info_next and server->fd == INVALID_SOCKET) {