Merge pull request #334 from ianbarber/master

Async connect error handling
This commit is contained in:
Pieter Hintjens 2012-05-03 06:08:02 -07:00
commit 47dbd4aa96
2 changed files with 13 additions and 5 deletions

View File

@ -186,6 +186,13 @@ int zmq::ipc_connecter_t::open ()
// Connect was successfull immediately.
if (rc == 0)
return 0;
// Translate other error codes indicating asynchronous connect has been
// launched to a uniform EINPROGRESS.
if (rc == -1 && errno == EINTR) {
errno = EINPROGRESS;
return -1;
}
// Forward the error.
return -1;

View File

@ -140,7 +140,7 @@ void zmq::tcp_connecter_t::start_connecting ()
}
// Connection establishment may be delayed. Poll for its completion.
else if (rc == -1 && errno == EAGAIN) {
else if (rc == -1 && errno == EINPROGRESS) {
handle = add_fd (s);
handle_valid = true;
set_pollout (handle);
@ -211,17 +211,18 @@ int zmq::tcp_connecter_t::open ()
if (rc == 0)
return 0;
// Asynchronous connect was launched.
// Translate other error codes indicating asynchronous connect has been
// launched to a uniform EINPROGRESS.
#ifdef ZMQ_HAVE_WINDOWS
if (rc == SOCKET_ERROR && (WSAGetLastError () == WSAEINPROGRESS ||
WSAGetLastError () == WSAEWOULDBLOCK)) {
errno = EAGAIN;
errno = EINPROGRESS;
return -1;
}
wsa_error_to_errno ();
#else
if (rc == -1 && errno == EINPROGRESS) {
errno = EAGAIN;
if (rc == -1 && errno == EINTR) {
errno = EINPROGRESS;
return -1;
}
#endif