git/list[1] front-page[2] threads[3] people[4] search[5] about
 

Re: fatal: unexpected EOF

From
Alex Riesen <raa.lkml@gmail.com>
Date
Mar 2, 2006, 22:23 UTC
Message-ID
<20060302222328.GF6183@steel.home>
In-Reply-To
<12c511ca0602280759t2e584a4bkd7b6f4d97ade92f7@mail.gmail.com>
Tony Luck, Tue, Feb 28, 2006 16:59:09 +0100:
Show 11 quoted lines
> > I doubt it is a problem with mirroring, since it affects all repos
> > (kernel, git, cogito, etc.) at the same time.
> 
> Ditto.  Jes has been grumbling overnight that he can't get a reliable pull
> from my kernel repo ... and that hasn't been updated in 10 days, so the
> mirror code shouldn't be touching it.  His error was:
> 
>   fatal: read error (Connection reset by peer)
>   Fetch failure: git://git.kernel.org/pub/...
> 
> He also reported that after a few retries it worked.

I had the problems too and even made the patch (below) to see what it was. I saw to A-records for zeus-pub.kernel.org (git.kernel.org is an alias of it) where one of them (I believe it was 204.152.191.37) sometimes didn't answer or dropped connection.

---
 connect.c |   41 +++++++++++++++++++++++++++++++++++++++--
 1 files changed, 39 insertions(+), 2 deletions(-)
b5ceb5f3f1c6ff62a3ccb13f360a34b07b9c8482
diff --git a/connect.c b/connect.c
index 3f2d65c..e911fde 100644
--- a/connect.c
+++ b/connect.c
@@ -322,6 +322,23 @@ static enum protocol get_protocol(const 
 
 #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;
+}
+
 static int git_tcp_connect(int fd[2], const char *prog, char *host, char *path)
 {
 	int sockfd = -1;
@@ -329,6 +346,7 @@ static int git_tcp_connect(int fd[2], co
 	char *port = STR(DEFAULT_GIT_PORT);
 	struct addrinfo hints, *ai0, *ai;
 	int gai;
+	int cnt = 0;
 
 	if (host[0] == '[') {
 		end = strchr(host + 1, ']');
@@ -355,15 +373,23 @@ static int git_tcp_connect(int fd[2], co
 	if (gai)
 		die("Unable to look up %s (%s)", host, gai_strerror(gai));
 
-	for (ai0 = ai; ai; ai = ai->ai_next) {
+	for (ai0 = ai; ai; ++cnt, ai = ai->ai_next) {
 		sockfd = socket(ai->ai_family, ai->ai_socktype, ai->ai_protocol);
 		if (sockfd < 0)
 			continue;
 		if (connect(sockfd, ai->ai_addr, ai->ai_addrlen) < 0) {
+			fprintf(stderr, "%s: %s[%d: %s]: net=%s, errno=%s\n",
+				argv0,
+				host,
+				cnt,
+				ai_name(ai),
+				hstrerror(h_errno),
+				strerror(errno));
 			close(sockfd);
 			sockfd = -1;
 			continue;
 		}
+		fprintf(stderr, "using %s[%s]\n", host, ai_name(ai));
 		break;
 	}
 
@@ -389,6 +415,7 @@ static int git_tcp_connect(int fd[2], co
 	struct sockaddr_in sa;
 	char **ap;
 	unsigned int nport;
+	int cnt;
 
 	if (host[0] == '[') {
 		end = strchr(host + 1, ']');
@@ -420,7 +447,7 @@ static int git_tcp_connect(int fd[2], co
 		nport = se->s_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)
 			continue;
@@ -431,10 +458,20 @@ static int git_tcp_connect(int fd[2], co
 		memcpy(&sa.sin_addr, *ap, he->h_length);
 
 		if (connect(sockfd, (struct sockaddr *)&sa, sizeof sa) < 0) {
+			fprintf(stderr, "%s: %s[%d: %s]: net=%s, errno=%s\n",
+				argv0,
+				host,
+				cnt,
+				inet_ntoa(*(struct in_addr *)&sa.sin_addr),
+				hstrerror(h_errno),
+				strerror(errno));
 			close(sockfd);
 			sockfd = -1;
 			continue;
 		}
+		fprintf(stderr, "using %s[%s]\n",
+			host,
+			inet_ntoa(*(struct in_addr *)&sa.sin_addr));
 		break;
 	}
 
-- 
1.2.3.g3987
Previous: Tony Luck
Message 5 of 5 in “fatal: unexpected EOF”
  1. Brian GerstFeb 28, 2006
  2. Linus TorvaldsFeb 28, 2006
  3. Brian GerstFeb 28, 2006
  4. Tony LuckFeb 28, 2006
  5. Alex RiesenMar 2, 2006

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.