From: Oliver Kurth Date: Mon, 28 Oct 2019 23:12:42 +0000 (-0700) Subject: Common source file changes not directly applicable to open-vm-tools. X-Git-Tag: stable-11.1.0~191 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=51333efb09aa5725138793dd7a41c62112aeb626;p=thirdparty%2Fopen-vm-tools.git Common source file changes not directly applicable to open-vm-tools. --- diff --git a/open-vm-tools/lib/asyncsocket/asyncSocketBase.c b/open-vm-tools/lib/asyncsocket/asyncSocketBase.c index 33b94a052..54394bc24 100644 --- a/open-vm-tools/lib/asyncsocket/asyncSocketBase.c +++ b/open-vm-tools/lib/asyncsocket/asyncSocketBase.c @@ -778,6 +778,15 @@ AsyncSocket_MsgError(int asyncSockError) // IN break; case ASOCKERR_BUSY: result = MSGID(asyncsocket.busy) "Concurrent operations on socket"; + break; + case ASOCKERR_PROXY_NEEDS_AUTHENTICATION: + result = MSGID(asyncsocket.proxyneedsauthentication) + "Proxy needs authentication"; + break; + case ASOCKERR_PROXY_CONNECT_FAILED: + result = MSGID(asyncsocket.proxyconnectfailed) + "Connection failed through proxy"; + break; } if (!result) { diff --git a/open-vm-tools/lib/asyncsocket/asyncsocket.c b/open-vm-tools/lib/asyncsocket/asyncsocket.c index 0d2abaa25..3241383c6 100644 --- a/open-vm-tools/lib/asyncsocket/asyncsocket.c +++ b/open-vm-tools/lib/asyncsocket/asyncsocket.c @@ -2179,11 +2179,13 @@ AsyncTCPSocketConnect(struct sockaddr_storage *addr, // IN sysErr, Err_Errno2String(sysErr)); /* - * If "network unreachable" error happens, explicitly propogate + * If "network unreachable" or "No route to host" + * errors happens, explicitly propogate * the error to trigger the reconnection if possible. */ - error = (sysErr == ASOCK_ENETUNREACH) ? ASOCKERR_NETUNREACH : - ASOCKERR_CONNECT; + error = (sysErr == ASOCK_ENETUNREACH || + sysErr == ASOCK_EHOSTUNREACH) ? ASOCKERR_NETUNREACH : + ASOCKERR_CONNECT; goto errorHaveAsock; } } else { @@ -3852,8 +3854,11 @@ AsyncTCPSocketConnectInternal(AsyncTCPSocket *s) // IN if (optval != 0) { s->genericErrno = optval; TCPSOCKLOG(1, s, "connection SO_ERROR: %s\n", Err_Errno2String(optval)); - - return ASOCKERR_GENERIC; + if (optval == ASOCK_ENETUNREACH || optval == ASOCK_EHOSTUNREACH) { + return ASOCKERR_NETUNREACH; + } else { + return ASOCKERR_CONNECT; + } } s->localAddrLen = sizeof s->localAddr; @@ -4988,7 +4993,9 @@ AsyncTCPSocketConnectCallback(void *clientData) // IN AsyncTCPSocketAddRef(asock); retval = AsyncTCPSocketConnectInternal(asock); if (retval != ASOCKERR_SUCCESS) { - ASSERT(retval == ASOCKERR_GENERIC); /* Only one we're expecting */ + ASSERT(retval == ASOCKERR_GENERIC || + retval == ASOCKERR_NETUNREACH || + retval == ASOCKERR_CONNECT); AsyncTCPSocketHandleError(asock, retval); } AsyncTCPSocketRelease(asock); diff --git a/open-vm-tools/lib/include/asyncsocket.h b/open-vm-tools/lib/include/asyncsocket.h index 123714b98..f43d07b68 100644 --- a/open-vm-tools/lib/include/asyncsocket.h +++ b/open-vm-tools/lib/include/asyncsocket.h @@ -81,6 +81,8 @@ extern "C" { #define ASOCKERR_NETUNREACH 14 #define ASOCKERR_ADDRUNRESV 15 #define ASOCKERR_BUSY 16 +#define ASOCKERR_PROXY_NEEDS_AUTHENTICATION 17 +#define ASOCKERR_PROXY_CONNECT_FAILED 18 /* * Cross-platform codes for AsyncSocket_GetGenericError(): @@ -95,6 +97,7 @@ extern "C" { #define ASOCK_ECONNRESET WSAECONNRESET #define ASOCK_ECONNABORTED WSAECONNABORTED #define ASOCK_EPIPE ERROR_NO_DATA +#define ASOCK_EHOSTUNREACH WSAEHOSTUNREACH #else #define ASOCK_ENOTCONN ENOTCONN #define ASOCK_ENOTSOCK ENOTSOCK @@ -105,6 +108,7 @@ extern "C" { #define ASOCK_ECONNRESET ECONNRESET #define ASOCK_ECONNABORTED ECONNABORTED #define ASOCK_EPIPE EPIPE +#define ASOCK_EHOSTUNREACH EHOSTUNREACH #endif /*