X-Git-Url: https://git.m6w6.name/?a=blobdiff_plain;f=libmemcached%2Fmemcached_connect.c;h=7d6f85a49840c99ed2c8be8114e38a5b030d0200;hb=f562c49d93b63a33b4c914a1c5b0ec43576aaafc;hp=5531ad792d47175439d22c469138dbdb99575872;hpb=26c1a71921b1468d56f6edaa7e6e3855ec1c879f;p=m6w6%2Flibmemcached diff --git a/libmemcached/memcached_connect.c b/libmemcached/memcached_connect.c index 5531ad79..7d6f85a4 100644 --- a/libmemcached/memcached_connect.c +++ b/libmemcached/memcached_connect.c @@ -207,13 +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; } @@ -225,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) @@ -285,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;