X-Git-Url: https://git.m6w6.name/?a=blobdiff_plain;f=libmemcached%2Fmemcached_connect.c;h=7d6f85a49840c99ed2c8be8114e38a5b030d0200;hb=f562c49d93b63a33b4c914a1c5b0ec43576aaafc;hp=ab4b84f0936d588cac7fe7671d25647742727809;hpb=34a8c3858f30b02568c87f56a827f618aba6d6be;p=m6w6%2Flibmemcached diff --git a/libmemcached/memcached_connect.c b/libmemcached/memcached_connect.c index ab4b84f0..7d6f85a4 100644 --- a/libmemcached/memcached_connect.c +++ b/libmemcached/memcached_connect.c @@ -1,5 +1,6 @@ #include "common.h" #include +#include static memcached_return set_hostinfo(memcached_server_st *server) { @@ -206,12 +207,23 @@ test_connect: fds[0].events= POLLOUT | POLLERR; error= poll(fds, 1, ptr->root->connect_timeout); - if (error != 1) + if (error == 0) + { + goto handle_retry; + } + else if (error != 1) { ptr->cached_errno= errno; WATCHPOINT_ERRNO(ptr->cached_errno); + WATCHPOINT_NUMBER(ptr->root->connect_timeout); close(ptr->fd); ptr->fd= -1; + if (ptr->address_info) + { + freeaddrinfo(ptr->address_info); + ptr->address_info= NULL; + } + return MEMCACHED_ERRNO; } @@ -223,8 +235,8 @@ test_connect: case EISCONN: /* We were spinning waiting on connect */ break; default: +handle_retry: ptr->cached_errno= errno; - WATCHPOINT_ERRNO(ptr->cached_errno); close(ptr->fd); ptr->fd= -1; if (ptr->root->retry_timeout) @@ -283,9 +295,6 @@ memcached_return memcached_connect(memcached_server_st *ptr) WATCHPOINT_ASSERT(0); } - if (rc != MEMCACHED_SUCCESS) - WATCHPOINT_ERROR(rc); - LIBMEMCACHED_MEMCACHED_CONNECT_END(); return rc;