]> git.ipfire.org Git - thirdparty/open-vm-tools.git/commitdiff
Common source file changes not directly applicable to open-vm-tools.
authorOliver Kurth <okurth@vmware.com>
Mon, 28 Oct 2019 23:12:42 +0000 (16:12 -0700)
committerOliver Kurth <okurth@vmware.com>
Mon, 28 Oct 2019 23:12:42 +0000 (16:12 -0700)
open-vm-tools/lib/asyncsocket/asyncSocketBase.c
open-vm-tools/lib/asyncsocket/asyncsocket.c
open-vm-tools/lib/include/asyncsocket.h

index 33b94a05222b1b578d08e6006c0e35a7425f19af..54394bc24e89858695ab9d104d94da3657c88f5e 100644 (file)
@@ -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) {
index 0d2abaa25798eaf9bd0db3868901167b9be9dd20..3241383c635c1d915ae03652f59a80ad5538b902 100644 (file)
@@ -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);
index 123714b98f0b7d3c9728264a0930182b8eb6351f..f43d07b68dab47d2d77f84cf2682b17eb8b570a3 100644 (file)
@@ -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
 
 /*