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

Re: 2.6.17-rc6-mm2

From
MLMichal Ludvig <michal@logix.cz>
Date
Jun 20, 2006, 03:01 UTC
Message-ID
<44976506.8040205@logix.cz>
In-Reply-To
<Pine.LNX.4.64.0606152335130.5498@g5.osdl.org>
Linus Torvalds wrote:
Show 13 quoted lines
> 
> On Fri, 16 Jun 2006, Goo GGooo wrote:
> 
>> I suggest adding SO_KEEPALIVE option on the git socket.
> 
> Actually, the really irritating thing is that we actually generate all 
> these nice status updates, which just makes pulling and cloning a lot more 
> comfortable, because you actually see what is going on, and what to 
> expect. 
> 
> Except they only work over ssh, where we have a separate channel (for 
> stderr), and with the native git protocol all that nice status work just 
> gets flushed to /dev/null :(

OpenBSD has CVS access to their repos over SSH even for anonymous users. Could something similar be set up on git.kernel.org as well?

> And in your case, the usability downside actually turned into a real 
> accessibility bug.

Same issue here. Thanks for the hint. Attached is a patch against git 1.4.0 that solves it perfectly in my case.

Sysctl settings (for keepalive every 10 sec): net.ipv4.tcp_keepalive_intvl=10 net.ipv4.tcp_keepalive_time=10

Michal
Set SO_KEEPALIVE option on native git:// sockets.
Signed-off-by: Michal Ludvig <michal@logix.cz>
Index: git-1.4.0/connect.c
===================================================================
--- git-1.4.0.orig/connect.c
+++ git-1.4.0/connect.c
@@ -331,7 +331,7 @@ static int git_tcp_connect_sock(char *ho
 	char *colon, *end;
 	char *port = STR(DEFAULT_GIT_PORT);
 	struct addrinfo hints, *ai0, *ai;
-	int gai;
+	int gai, option;
 
 	if (host[0] == '[') {
 		end = strchr(host + 1, ']');
@@ -363,6 +363,10 @@ static int git_tcp_connect_sock(char *ho
 				ai->ai_socktype, ai->ai_protocol);
 		if (sockfd < 0)
 			continue;
+
+		option = 1;
+		setsockopt(sockfd, SOL_SOCKET, SO_KEEPALIVE, &option, sizeof(option));
+
 		if (connect(sockfd, ai->ai_addr, ai->ai_addrlen) < 0) {
 			close(sockfd);
 			sockfd = -1;
@@ -392,7 +396,7 @@ static int git_tcp_connect_sock(char *ho
 	struct hostent *he;
 	struct sockaddr_in sa;
 	char **ap;
-	unsigned int nport;
+	unsigned int nport, option;
 
 	if (host[0] == '[') {
 		end = strchr(host + 1, ']');
@@ -433,6 +437,9 @@ static int git_tcp_connect_sock(char *ho
 		sa.sin_port = htons(nport);
 		memcpy(&sa.sin_addr, *ap, he->h_length);
 
+		option = 1;
+		setsockopt(sockfd, SOL_SOCKET, SO_KEEPALIVE, &option, sizeof(option));
+
 		if (connect(sockfd, (struct sockaddr *)&sa, sizeof sa) < 0) {
 			close(sockfd);
 			sockfd = -1;
Previous: bert hubertNext: Linus Torvalds
Message 9 of 11 in “Re: 2.6.17-rc6-mm2”
  1. Goo GGoooJun 16, 2006
  2. Linus TorvaldsJun 16, 2006
  3. Goo GGoooJun 16, 2006
  4. Linus TorvaldsJun 16, 2006
  5. H. Peter AnvinJun 16, 2006
  6. Junio C HamanoJun 16, 2006
  7. Linus TorvaldsJun 17, 2006
  8. bert hubertJun 16, 2006
  9. Michal LudvigJun 20, 2006
  10. Linus TorvaldsJun 20, 2006
  11. Uwe ZeisbergerJun 16, 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.