summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJunio C Hamano <gitster@pobox.com>2011-07-22 21:44:28 (GMT)
committerJunio C Hamano <gitster@pobox.com>2011-07-22 21:44:28 (GMT)
commit1fad2862c8d13d430f3a9df7c6741d81e6c716b4 (patch)
tree27bcac5029a256b2ac0f070ab7fc4f8faf097fa2
parentf424d7e0b91372d98047850aa083a5e397eed57c (diff)
parent63a995b657dab9c1021f56dfe17804d2ad07577e (diff)
downloadgit-1fad2862c8d13d430f3a9df7c6741d81e6c716b4.zip
git-1fad2862c8d13d430f3a9df7c6741d81e6c716b4.tar.gz
git-1fad2862c8d13d430f3a9df7c6741d81e6c716b4.tar.bz2
Merge branch 'dz/connect-error-report'
* dz/connect-error-report: Do not log unless all connect() attempts fail
-rw-r--r--connect.c25
1 files changed, 11 insertions, 14 deletions
diff --git a/connect.c b/connect.c
index 2119c3f..844107e 100644
--- a/connect.c
+++ b/connect.c
@@ -192,7 +192,8 @@ static const char *ai_name(const struct addrinfo *ai)
*/
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;
@@ -219,18 +220,12 @@ static int git_tcp_connect_sock(char *host, int flags)
for (ai0 = ai; ai; ai = ai->ai_next) {
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;
}
@@ -242,11 +237,13 @@ static int git_tcp_connect_sock(char *host, int flags)
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;
}