*/
 static int git_tcp_connect_sock(char *host)
 {
-       int sockfd = -1;
+       int sockfd = -1, saved_errno = 0;
        char *colon, *end;
        const char *port = STR(DEFAULT_GIT_PORT);
        struct addrinfo hints, *ai0, *ai;
        for (ai0 = ai; ai; ai = ai->ai_next) {
                sockfd = socket(ai->ai_family,
                                ai->ai_socktype, ai->ai_protocol);
-               if (sockfd < 0)
+               if (sockfd < 0) {
+                       saved_errno = errno;
                        continue;
+               }
                if (connect(sockfd, ai->ai_addr, ai->ai_addrlen) < 0) {
+                       saved_errno = errno;
                        close(sockfd);
                        sockfd = -1;
                        continue;
        freeaddrinfo(ai0);
 
        if (sockfd < 0)
-               die("unable to connect a socket (%s)", strerror(errno));
+               die("unable to connect a socket (%s)", strerror(saved_errno));
 
        return sockfd;
 }
  */
 static int git_tcp_connect_sock(char *host)
 {
-       int sockfd = -1;
+       int sockfd = -1, saved_errno = 0;
        char *colon, *end;
        char *port = STR(DEFAULT_GIT_PORT), *ep;
        struct hostent *he;
 
        for (ap = he->h_addr_list; *ap; ap++) {
                sockfd = socket(he->h_addrtype, SOCK_STREAM, 0);
-               if (sockfd < 0)
+               if (sockfd < 0) {
+                       saved_errno = errno;
                        continue;
+               }
 
                memset(&sa, 0, sizeof sa);
                sa.sin_family = he->h_addrtype;
                memcpy(&sa.sin_addr, *ap, he->h_length);
 
                if (connect(sockfd, (struct sockaddr *)&sa, sizeof sa) < 0) {
+                       saved_errno = errno;
                        close(sockfd);
                        sockfd = -1;
                        continue;
        }
 
        if (sockfd < 0)
-               die("unable to connect a socket (%s)", strerror(errno));
+               die("unable to connect a socket (%s)", strerror(saved_errno));
 
        return sockfd;
 }