Verbose connect messages to show the IP addresses used
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>
This commit is contained in:
parent
18bece4367
commit
ba505322a4
38
connect.c
38
connect.c
@ -391,6 +391,23 @@ static enum protocol get_protocol(const char *name)
|
|||||||
|
|
||||||
#ifndef NO_IPV6
|
#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.
|
* Returns a connected socket() fd, or else die()s.
|
||||||
*/
|
*/
|
||||||
@ -401,6 +418,7 @@ static int git_tcp_connect_sock(char *host, int flags)
|
|||||||
const char *port = STR(DEFAULT_GIT_PORT);
|
const char *port = STR(DEFAULT_GIT_PORT);
|
||||||
struct addrinfo hints, *ai0, *ai;
|
struct addrinfo hints, *ai0, *ai;
|
||||||
int gai;
|
int gai;
|
||||||
|
int cnt = 0;
|
||||||
|
|
||||||
if (host[0] == '[') {
|
if (host[0] == '[') {
|
||||||
end = strchr(host + 1, ']');
|
end = strchr(host + 1, ']');
|
||||||
@ -444,10 +462,18 @@ static int git_tcp_connect_sock(char *host, int flags)
|
|||||||
}
|
}
|
||||||
if (connect(sockfd, ai->ai_addr, ai->ai_addrlen) < 0) {
|
if (connect(sockfd, ai->ai_addr, ai->ai_addrlen) < 0) {
|
||||||
saved_errno = errno;
|
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);
|
close(sockfd);
|
||||||
sockfd = -1;
|
sockfd = -1;
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
if (flags & CONNECT_VERBOSE)
|
||||||
|
fprintf(stderr, "%s ", ai_name(ai));
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -476,6 +502,7 @@ static int git_tcp_connect_sock(char *host, int flags)
|
|||||||
struct sockaddr_in sa;
|
struct sockaddr_in sa;
|
||||||
char **ap;
|
char **ap;
|
||||||
unsigned int nport;
|
unsigned int nport;
|
||||||
|
int cnt;
|
||||||
|
|
||||||
if (host[0] == '[') {
|
if (host[0] == '[') {
|
||||||
end = strchr(host + 1, ']');
|
end = strchr(host + 1, ']');
|
||||||
@ -512,7 +539,7 @@ static int git_tcp_connect_sock(char *host, int flags)
|
|||||||
if (flags & CONNECT_VERBOSE)
|
if (flags & CONNECT_VERBOSE)
|
||||||
fprintf(stderr, "done.\nConnecting to %s (port %s) ... ", host, port);
|
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);
|
sockfd = socket(he->h_addrtype, SOCK_STREAM, 0);
|
||||||
if (sockfd < 0) {
|
if (sockfd < 0) {
|
||||||
saved_errno = errno;
|
saved_errno = errno;
|
||||||
@ -526,10 +553,19 @@ static int git_tcp_connect_sock(char *host, int flags)
|
|||||||
|
|
||||||
if (connect(sockfd, (struct sockaddr *)&sa, sizeof sa) < 0) {
|
if (connect(sockfd, (struct sockaddr *)&sa, sizeof sa) < 0) {
|
||||||
saved_errno = errno;
|
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);
|
close(sockfd);
|
||||||
sockfd = -1;
|
sockfd = -1;
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
if (flags & CONNECT_VERBOSE)
|
||||||
|
fprintf(stderr, "%s ",
|
||||||
|
inet_ntoa(*(struct in_addr *)&sa.sin_addr));
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user