Code

Merge branch 'dz/connect-error-report' into maint
authorJunio C Hamano <gitster@pobox.com>
Mon, 12 Sep 2011 04:53:47 +0000 (21:53 -0700)
committerJunio C Hamano <gitster@pobox.com>
Mon, 12 Sep 2011 04:53:47 +0000 (21:53 -0700)
* dz/connect-error-report:
  Do not log unless all connect() attempts fail

1  2 
connect.c

diff --combined connect.c
index b3585aba22bcbd72c9697fd256ef95f691aa384f,844107e2954f6cb8354990d69c6568b9d3091470..d2ce57f850fa6d0a6de04f6f714dec487ff9f1ed
+++ b/connect.c
@@@ -192,7 -192,8 +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;
  }