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

Re: [PATCH] http: use curl's tcp keepalive if available

From
EWEric Wong <normalperson@yhbt.net>
Date
Oct 15, 2013, 04:58 UTC
Message-ID
<20131015045814.GA12312@dcvr.yhbt.net>
In-Reply-To
<20131015000614.GA10905@sigill.intra.peff.net>
Jeff King <peff@peff.net> wrote:
Show 29 quoted lines
> On Mon, Oct 14, 2013 at 11:38:39PM +0000, Eric Wong wrote:
> 
> > I wanted it to work as older curl first (since I noticed this
> > on an old server).  But your patch on top of mine looks reasonable,
> > thanks.
> 
> Makes sense. Here it is with a real commit message (on top of the
> ew/keepalive topic).
> 
> -- >8 --
> Subject: http: use curl's tcp keepalive if available
> 
> Commit a15d069 taught git to use curl's SOCKOPTFUNCTION hook
> to turn on TCP keepalives. However, modern versions of curl
> have a TCP_KEEPALIVE option, which can do this for us. As an
> added bonus, the curl code knows how to turn on keepalive
> for a much wider variety of platforms. The only downside to
> using this option is that not everybody has a new enough curl.
> Let's split our keepalive options into three conditionals:
> 
>   1. With curl 7.25.0 and newer, we rely on curl to do it
>      right.
> 
>   2. With older curl that still knows SOCKOPTFUNCTION, we
>      use the code from a15d069.
> 
>   3. Otherwise, we are out of luck, and the call is a no-op.
> 
> Signed-off-by: Jeff King <peff@peff.net>
Thanks.
Tested-by: Eric Wong <normalperson@yhbt.net>
on curl 7.21.0 and 7.26.0, confirmed via strace:
	setsockopt(fd, SOL_SOCKET, SO_KEEPALIVE, [1], 4) = 0
I can also confirm 7.26.0 adds:
	setsockopt(fd, SOL_TCP, TCP_KEEPIDLE, [60], 4) = 0
	setsockopt(fd, SOL_TCP, TCP_KEEPINTVL, [60], 4) = 0
to the strace on Linux.
Show 11 quoted lines
> ---
> Given the #ifdefs in curl's keepalive code, I suspect we may see build
> problems for people in case 2 on some systems, with or without my patch.
> I think this patch is a strict improvement, though; if they have a new
> enough curl, they will not even look at the case 2 code. And if they do
> not, our previous options were:
> 
>   a. Add platform-specific code for them.
>   
>   b. Tell them they are out of luck, and add an #ifdef to push them into
>      case 3.
Case 2 works fine on my Debian Squeeze system.
> Now we have an extra option:
> 
>   c. Tell them to upgrade curl. :)
Yes, I keep forgetting I still have a Debian Squeeze machine :x
Previous: Jeff KingNext: Jeff King
Message 7 of 9 in “http: enable keepalive on TCP sockets”
  1. http: enable keepalive on TCP socketsEric Wong, Oct 12, 2013
  2. Daniel StenbergOct 13, 2013
  3. Eric WongOct 14, 2013
  4. Jeff KingOct 14, 2013
  5. Eric WongOct 14, 2013
  6. http: use curl's tcp keepalive if availableJeff King, Oct 15, 2013
  7. Eric WongOct 15, 2013
  8. Jeff KingOct 15, 2013
  9. Eric WongOct 15, 2013

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.