提交 47ce1153 编写于 作者: J Jeff King 提交者: Junio C Hamano

http: use curl's tcp keepalive if available

Commit a15d069a 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 a15d069a.

  3. Otherwise, we are out of luck, and the call is a no-op.
Signed-off-by: NJeff King <peff@peff.net>
Signed-off-by: NJunio C Hamano <gitster@pobox.com>
上级 a15d069a
......@@ -233,7 +233,13 @@ static int has_cert_password(void)
return 0;
}
/* curl 7.25.0 has CURLOPT_TCP_KEEPALIVE, too, but we support older curl */
#if LIBCURL_VERSION_NUM >= 0x071900
static void set_curl_keepalive(CURL *c)
{
curl_easy_setopt(c, CURLOPT_TCP_KEEPALIVE, 1);
}
#elif LIBCURL_VERSION_NUM >= 0x071000
static int sockopt_callback(void *client, curl_socket_t fd, curlsocktype type)
{
int ka = 1;
......@@ -251,6 +257,18 @@ static int sockopt_callback(void *client, curl_socket_t fd, curlsocktype type)
return 0; /* CURL_SOCKOPT_OK only exists since curl 7.21.5 */
}
static void set_curl_keepalive(CURL *c)
{
curl_easy_setopt(c, CURLOPT_SOCKOPTFUNCTION, sockopt_callback);
}
#else
static void set_curl_keepalive(CURL *c)
{
/* not supported on older curl versions */
}
#endif
static CURL *get_curl_handle(void)
{
CURL *result = curl_easy_init();
......@@ -316,9 +334,7 @@ static CURL *get_curl_handle(void)
if (curl_http_proxy)
curl_easy_setopt(result, CURLOPT_PROXY, curl_http_proxy);
#if LIBCURL_VERSION_NUM >= 0x071000
curl_easy_setopt(result, CURLOPT_SOCKOPTFUNCTION, sockopt_callback);
#endif
set_curl_keepalive(result);
return result;
}
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册