{"thread":{"id":"8287","subject":"[PATCH] Verbose connect messages to show the IP addresses used","startedAt":"2007-05-23T21:34:27Z","lastAt":"2007-05-23T21:34:27Z","messageCount":1,"participants":["Alex Riesen"],"isPatch":true,"patchVersion":1,"patchTotal":null},"messages":[{"id":"43053","messageId":"20070523213427.GG2554@steel.home","threadId":"8287","inReplyTo":null,"subject":"[PATCH] Verbose connect messages to show the IP addresses used","fromName":"Alex Riesen","fromEmail":"raa.lkml@gmail.com","sentAt":"2007-05-23T21:34:27Z","receivedAt":"2007-05-23T21:34:27Z","isPatch":true,"sender":{"key":"raa.lkml@gmail.com","avatar":"https://avatars.githubusercontent.com/u/324101?v=4"},"body":"Also, the patch makes the error messages more verbose. Helps when\ndiagnosing connect problems on weird systems.\n\nSigned-off-by: Alex Riesen <raa.lkml@gmail.com>\n---\n connect.c |   38 +++++++++++++++++++++++++++++++++++++-\n 1 files changed, 37 insertions(+), 1 deletions(-)\n\ndiff --git a/connect.c b/connect.c\nindex 2a26fdb..3757392 100644\n--- a/connect.c\n+++ b/connect.c\n@@ -391,6 +391,23 @@ static enum protocol get_protocol(const char *name)\n \n #ifndef NO_IPV6\n \n+static const char *ai_name(const struct addrinfo *ai)\n+{\n+\tstatic char addr[INET_ADDRSTRLEN];\n+\tif ( AF_INET == ai->ai_family ) {\n+\t\tstruct sockaddr_in *in;\n+\t\tin = (struct sockaddr_in *)ai->ai_addr;\n+\t\tinet_ntop(ai->ai_family, &in->sin_addr, addr, sizeof(addr));\n+\t} else if ( AF_INET6 == ai->ai_family ) {\n+\t\tstruct sockaddr_in6 *in;\n+\t\tin = (struct sockaddr_in6 *)ai->ai_addr;\n+\t\tinet_ntop(ai->ai_family, &in->sin6_addr, addr, sizeof(addr));\n+\t} else {\n+\t\tstrcpy(addr, \"(unknown)\");\n+\t}\n+\treturn addr;\n+}\n+\n /*\n  * Returns a connected socket() fd, or else die()s.\n  */\n@@ -401,6 +418,7 @@ static int git_tcp_connect_sock(char *host, int flags)\n \tconst char *port = STR(DEFAULT_GIT_PORT);\n \tstruct addrinfo hints, *ai0, *ai;\n \tint gai;\n+\tint cnt = 0;\n \n \tif (host[0] == '[') {\n \t\tend = strchr(host + 1, ']');\n@@ -444,10 +462,18 @@ static int git_tcp_connect_sock(char *host, int flags)\n \t\t}\n \t\tif (connect(sockfd, ai->ai_addr, ai->ai_addrlen) < 0) {\n \t\t\tsaved_errno = errno;\n+\t\t\tfprintf(stderr, \"%s[%d: %s]: net=%s, errno=%s\\n\",\n+\t\t\t\thost,\n+\t\t\t\tcnt,\n+\t\t\t\tai_name(ai),\n+\t\t\t\thstrerror(h_errno),\n+\t\t\t\tstrerror(saved_errno));\n \t\t\tclose(sockfd);\n \t\t\tsockfd = -1;\n \t\t\tcontinue;\n \t\t}\n+\t\tif (flags & CONNECT_VERBOSE)\n+\t\t\tfprintf(stderr, \"%s \", ai_name(ai));\n \t\tbreak;\n \t}\n \n@@ -476,6 +502,7 @@ static int git_tcp_connect_sock(char *host, int flags)\n \tstruct sockaddr_in sa;\n \tchar **ap;\n \tunsigned int nport;\n+\tint cnt;\n \n \tif (host[0] == '[') {\n \t\tend = strchr(host + 1, ']');\n@@ -512,7 +539,7 @@ static int git_tcp_connect_sock(char *host, int flags)\n \tif (flags & CONNECT_VERBOSE)\n \t\tfprintf(stderr, \"done.\\nConnecting to %s (port %s) ... \", host, port);\n \n-\tfor (ap = he->h_addr_list; *ap; ap++) {\n+\tfor (cnt = 0, ap = he->h_addr_list; *ap; ap++, cnt++) {\n \t\tsockfd = socket(he->h_addrtype, SOCK_STREAM, 0);\n \t\tif (sockfd < 0) {\n \t\t\tsaved_errno = errno;\n@@ -526,10 +553,19 @@ static int git_tcp_connect_sock(char *host, int flags)\n \n \t\tif (connect(sockfd, (struct sockaddr *)&sa, sizeof sa) < 0) {\n \t\t\tsaved_errno = errno;\n+\t\t\tfprintf(stderr, \"%s[%d: %s]: net=%s, errno=%s\\n\",\n+\t\t\t\thost,\n+\t\t\t\tcnt,\n+\t\t\t\tinet_ntoa(*(struct in_addr *)&sa.sin_addr),\n+\t\t\t\thstrerror(h_errno),\n+\t\t\t\tstrerror(saved_errno));\n \t\t\tclose(sockfd);\n \t\t\tsockfd = -1;\n \t\t\tcontinue;\n \t\t}\n+\t\tif (flags & CONNECT_VERBOSE)\n+\t\t\tfprintf(stderr, \"%s \",\n+\t\t\t\tinet_ntoa(*(struct in_addr *)&sa.sin_addr));\n \t\tbreak;\n \t}\n \n-- \n1.5.2.58.g7a94-dirty\n"}]}