X-Git-Url: https://git.m6w6.name/?a=blobdiff_plain;f=libtest%2Fclient.cc;h=c536e9dd47f06bbda942fbbaa7644d53dd6e3ad0;hb=95474a1687017de0adb2c6ce57c1ab7c0704c5c6;hp=e392e6b098332e9da490aded46506a53ff7a7ce7;hpb=bcc7e71dd0d2c7d875ddb3583fd5ab2585304642;p=awesomized%2Flibmemcached diff --git a/libtest/client.cc b/libtest/client.cc index e392e6b0..c536e9dd 100644 --- a/libtest/client.cc +++ b/libtest/client.cc @@ -42,6 +42,13 @@ #include #include +#ifdef HAVE_POLL_H +# include +#endif + +#ifndef HAVE_MSG_NOSIGNAL +# define MSG_NOSIGNAL 0 +#endif namespace libtest { @@ -169,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; }