X-Git-Url: https://git.m6w6.name/?a=blobdiff_plain;f=libtest%2Fclient.cc;h=c536e9dd47f06bbda942fbbaa7644d53dd6e3ad0;hb=95bb4cd1ce48756ca12e5cc1bb6bd6ff8f457908;hp=6caac9b1b505d6fe0c94e34bcdf744354615426f;hpb=b85efdcd431fe49fad74ddfb590a5458dda0e920;p=awesomized%2Flibmemcached diff --git a/libtest/client.cc b/libtest/client.cc index 6caac9b1..c536e9dd 100644 --- a/libtest/client.cc +++ b/libtest/client.cc @@ -41,8 +41,14 @@ #include #include #include -#include +#ifdef HAVE_POLL_H +# include +#endif + +#ifndef HAVE_MSG_NOSIGNAL +# define MSG_NOSIGNAL 0 +#endif namespace libtest { @@ -170,13 +176,29 @@ bool SimpleClient::instance_connect() { if (connect(sock_fd, address_info_next->ai_addr, address_info_next->ai_addrlen) == SOCKET_ERROR) { + switch (errno) + { + case EINTR: + close_socket(); + continue; + + case EINPROGRESS: // nonblocking mode - first return + case EALREADY: // nonblocking mode - subsequent returns + continue; // Jump to while() and continue on + + + case ECONNREFUSED: + default: + break; + } + close_socket(); _error= strerror(errno); } } else { - fatal_message(strerror(errno)); + FATAL(strerror(errno)); } address_info_next= address_info_next->ai_next; }