Skip to content
/ git Public
forked from git/git

Commit

Permalink
Verbose connect messages to show the IP addresses used
Browse files Browse the repository at this point in the history
Also, the patch makes the error messages more verbose. Helps when
diagnosing connect problems on weird systems.

Signed-off-by: Alex Riesen <raa.lkml@gmail.com>
Signed-off-by: Junio C Hamano <junkio@cox.net>
  • Loading branch information
raalkml authored and Junio C Hamano committed May 25, 2007
1 parent 18bece4 commit ba50532
Showing 1 changed file with 37 additions and 1 deletion.
38 changes: 37 additions & 1 deletion connect.c
Original file line number Diff line number Diff line change
Expand Up @@ -391,6 +391,23 @@ static enum protocol get_protocol(const char *name)

#ifndef NO_IPV6

static const char *ai_name(const struct addrinfo *ai)
{
static char addr[INET_ADDRSTRLEN];
if ( AF_INET == ai->ai_family ) {
struct sockaddr_in *in;
in = (struct sockaddr_in *)ai->ai_addr;
inet_ntop(ai->ai_family, &in->sin_addr, addr, sizeof(addr));
} else if ( AF_INET6 == ai->ai_family ) {
struct sockaddr_in6 *in;
in = (struct sockaddr_in6 *)ai->ai_addr;
inet_ntop(ai->ai_family, &in->sin6_addr, addr, sizeof(addr));
} else {
strcpy(addr, "(unknown)");
}
return addr;
}

/*
* Returns a connected socket() fd, or else die()s.
*/
Expand All @@ -401,6 +418,7 @@ static int git_tcp_connect_sock(char *host, int flags)
const char *port = STR(DEFAULT_GIT_PORT);
struct addrinfo hints, *ai0, *ai;
int gai;
int cnt = 0;

if (host[0] == '[') {
end = strchr(host + 1, ']');
Expand Down Expand Up @@ -444,10 +462,18 @@ static int git_tcp_connect_sock(char *host, int flags)
}
if (connect(sockfd, ai->ai_addr, ai->ai_addrlen) < 0) {
saved_errno = errno;
fprintf(stderr, "%s[%d: %s]: net=%s, errno=%s\n",
host,
cnt,
ai_name(ai),
hstrerror(h_errno),
strerror(saved_errno));
close(sockfd);
sockfd = -1;
continue;
}
if (flags & CONNECT_VERBOSE)
fprintf(stderr, "%s ", ai_name(ai));
break;
}

Expand Down Expand Up @@ -476,6 +502,7 @@ static int git_tcp_connect_sock(char *host, int flags)
struct sockaddr_in sa;
char **ap;
unsigned int nport;
int cnt;

if (host[0] == '[') {
end = strchr(host + 1, ']');
Expand Down Expand Up @@ -512,7 +539,7 @@ static int git_tcp_connect_sock(char *host, int flags)
if (flags & CONNECT_VERBOSE)
fprintf(stderr, "done.\nConnecting to %s (port %s) ... ", host, port);

for (ap = he->h_addr_list; *ap; ap++) {
for (cnt = 0, ap = he->h_addr_list; *ap; ap++, cnt++) {
sockfd = socket(he->h_addrtype, SOCK_STREAM, 0);
if (sockfd < 0) {
saved_errno = errno;
Expand All @@ -526,10 +553,19 @@ static int git_tcp_connect_sock(char *host, int flags)

if (connect(sockfd, (struct sockaddr *)&sa, sizeof sa) < 0) {
saved_errno = errno;
fprintf(stderr, "%s[%d: %s]: net=%s, errno=%s\n",
host,
cnt,
inet_ntoa(*(struct in_addr *)&sa.sin_addr),
hstrerror(h_errno),
strerror(saved_errno));
close(sockfd);
sockfd = -1;
continue;
}
if (flags & CONNECT_VERBOSE)
fprintf(stderr, "%s ",
inet_ntoa(*(struct in_addr *)&sa.sin_addr));
break;
}

Expand Down

0 comments on commit ba50532

Please sign in to comment.