Merge branch 'maint'
authorJunio C Hamano <gitster@pobox.com>
Mon, 1 Aug 2011 21:45:02 +0000 (14:45 -0700)
committerJunio C Hamano <gitster@pobox.com>
Mon, 1 Aug 2011 21:45:02 +0000 (14:45 -0700)
* maint:
connect: correctly number ipv6 network adapter

1  2 
connect.c
diff --combined connect.c
index 844107e2954f6cb8354990d69c6568b9d3091470,b3585aba22bcbd72c9697fd256ef95f691aa384f..d2ce57f850fa6d0a6de04f6f714dec487ff9f1ed
+++ b/connect.c
@@@ -192,8 -192,7 +192,8 @@@ static const char *ai_name(const struc
   */
  static int git_tcp_connect_sock(char *host, int flags)
  {
 -      int sockfd = -1, saved_errno = 0;
 +      struct strbuf error_message = STRBUF_INIT;
 +      int sockfd = -1;
        const char *port = STR(DEFAULT_GIT_PORT);
        struct addrinfo hints, *ai0, *ai;
        int gai;
        if (flags & CONNECT_VERBOSE)
                fprintf(stderr, "done.\nConnecting to %s (port %s) ... ", host, port);
  
-       for (ai0 = ai; ai; ai = ai->ai_next) {
+       for (ai0 = ai; ai; ai = ai->ai_next, cnt++) {
                sockfd = socket(ai->ai_family,
                                ai->ai_socktype, ai->ai_protocol);
 -              if (sockfd < 0) {
 -                      saved_errno = errno;
 -                      continue;
 -              }
 -              if (connect(sockfd, ai->ai_addr, ai->ai_addrlen) < 0) {
 -                      saved_errno = errno;
 -                      fprintf(stderr, "%s[%d: %s]: errno=%s\n",
 -                              host,
 -                              cnt,
 -                              ai_name(ai),
 -                              strerror(saved_errno));
 -                      close(sockfd);
 +              if ((sockfd < 0) ||
 +                  (connect(sockfd, ai->ai_addr, ai->ai_addrlen) < 0)) {
 +                      strbuf_addf(&error_message, "%s[%d: %s]: errno=%s\n",
 +                                  host, cnt, ai_name(ai), strerror(errno));
 +                      if (0 <= sockfd)
 +                              close(sockfd);
                        sockfd = -1;
                        continue;
                }
        freeaddrinfo(ai0);
  
        if (sockfd < 0)
 -              die("unable to connect a socket (%s)", strerror(saved_errno));
 +              die("unable to connect to %s:\n%s", host, error_message.buf);
  
        if (flags & CONNECT_VERBOSE)
                fprintf(stderr, "done.\n");
  
 +      strbuf_release(&error_message);
 +
        return sockfd;
  }