Commit b2010432 authored by William Swanson's avatar William Swanson

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.
parent 22179afa
...@@ -347,16 +347,10 @@ zmq::fd_t zmq::tcp_connecter_t::connect () ...@@ -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 () ...@@ -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
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment