Do not crash on unusual connection-failure cases

Only assert on errors we know are our fault,
instead of trying to whitelist every possible network-related failure.
This makes ZeroMQ more portable to other platforms
where the possible errors are different.

In particular, the previous code would often die under iOS.
This commit is contained in:
William Swanson 2015-11-02 14:59:15 -08:00
parent 22179afaba
commit b2010432c7

View File

@ -347,16 +347,10 @@ zmq::fd_t zmq::tcp_connecter_t::connect ()
#ifdef ZMQ_HAVE_WINDOWS #ifdef ZMQ_HAVE_WINDOWS
zmq_assert (rc == 0); zmq_assert (rc == 0);
if (err != 0) { if (err != 0) {
if (err != WSAECONNREFUSED if (err == WSAEBADF ||
&& err != WSAETIMEDOUT err == WSAENOPROTOOPT ||
&& err != WSAECONNABORTED err == WSAENOTSOCK ||
&& err != WSAEHOSTUNREACH err == WSAENOBUFS)
&& err != WSAENETUNREACH
&& err != WSAENETDOWN
&& err != WSAEACCES
&& err != WSAEINVAL
&& err != WSAEADDRINUSE
&& err != WSAEADDRNOTAVAIL)
{ {
wsa_assert_no (err); wsa_assert_no (err);
} }
@ -370,14 +364,10 @@ zmq::fd_t zmq::tcp_connecter_t::connect ()
if (err != 0) { if (err != 0) {
errno = err; errno = err;
errno_assert ( errno_assert (
errno == ECONNREFUSED || errno != EBADF &&
errno == ECONNRESET || errno != ENOPROTOOPT &&
errno == ETIMEDOUT || errno != ENOTSOCK &&
errno == EHOSTUNREACH || errno != ENOBUFS);
errno == ENETUNREACH ||
errno == ENETDOWN ||
errno == EINVAL ||
errno == EADDRNOTAVAIL);
return retired_fd; return retired_fd;
} }
#endif #endif