diff options
author | Dave Reisner <dreisner@archlinux.org> | 2016-11-07 10:21:22 -0500 |
---|---|---|
committer | Allan McRae <allan@archlinux.org> | 2016-12-05 15:20:08 +1000 |
commit | 7114ca6208d3dffe685b994f0802c90727303fc8 (patch) | |
tree | 8751c3c4648a20b53b9d500bf8b00e6a6a558b85 /lib | |
parent | 263e65dbb3c841c70766e9509f0dcbdd1186c366 (diff) |
dload: use curl's keepalive mechanism
This does exactly the same thing as it code it replaces, but punt to
curl to do it for brevity. Requires curl 7.25.0, which we already cover.
Signed-off-by: Allan McRae <allan@archlinux.org>
Diffstat (limited to 'lib')
-rw-r--r-- | lib/libalpm/dload.c | 46 |
1 files changed, 3 insertions, 43 deletions
diff --git a/lib/libalpm/dload.c b/lib/libalpm/dload.c index 9d803580..ccd70d99 100644 --- a/lib/libalpm/dload.c +++ b/lib/libalpm/dload.c @@ -246,47 +246,6 @@ static size_t dload_parseheader_cb(void *ptr, size_t size, size_t nmemb, void *u return realsize; } -static int dload_sockopt_cb(void *userdata, curl_socket_t curlfd, - curlsocktype purpose) -{ - alpm_handle_t *handle = userdata; - int optval = 1; - - /* this whole method is to prevent FTP control connections from going sour - * during a long data transfer; crappy firewalls love to drop otherwise idle - * connections if there is no traffic. */ - if(purpose != CURLSOCKTYPE_IPCXN) { - return 0; - } - - /* don't abort operation if any setsockopt fails, just log to debug */ - if(setsockopt(curlfd, SOL_SOCKET, SO_KEEPALIVE, (void *)&optval, - sizeof(optval)) < 0) { - _alpm_log(handle, ALPM_LOG_DEBUG, - "Failed to set SO_KEEPALIVE on fd %d\n", curlfd); - } - else { -#ifdef TCP_KEEPIDLE - optval = 60; - if(setsockopt(curlfd, IPPROTO_TCP, TCP_KEEPIDLE, (void *)&optval, - sizeof(optval)) < 0) { - _alpm_log(handle, ALPM_LOG_DEBUG, - "Failed to set TCP_KEEPIDLE on fd %d\n", curlfd); - } -#endif -#ifdef TCP_KEEPINTVL - optval = 60; - if(setsockopt(curlfd, IPPROTO_TCP, TCP_KEEPINTVL, (void *)&optval, - sizeof(optval)) < 0) { - _alpm_log(handle, ALPM_LOG_DEBUG, - "Failed to set TCP_KEEPINTVL on fd %d\n", curlfd); - } -#endif - } - - return 0; -} - static void curl_set_handle_opts(struct dload_payload *payload, CURL *curl, char *error_buffer) { @@ -310,8 +269,9 @@ static void curl_set_handle_opts(struct dload_payload *payload, curl_easy_setopt(curl, CURLOPT_HEADERFUNCTION, dload_parseheader_cb); curl_easy_setopt(curl, CURLOPT_WRITEHEADER, (void *)payload); curl_easy_setopt(curl, CURLOPT_NETRC, CURL_NETRC_OPTIONAL); - curl_easy_setopt(curl, CURLOPT_SOCKOPTFUNCTION, dload_sockopt_cb); - curl_easy_setopt(curl, CURLOPT_SOCKOPTDATA, (void *)handle); + curl_easy_setopt(curl, CURLOPT_TCP_KEEPALIVE, 1L); + curl_easy_setopt(curl, CURLOPT_TCP_KEEPIDLE, 60L); + curl_easy_setopt(curl, CURLOPT_TCP_KEEPINTVL, 60L); curl_easy_setopt(curl, CURLOPT_HTTPAUTH, CURLAUTH_ANY); _alpm_log(handle, ALPM_LOG_DEBUG, "url: %s\n", payload->fileurl); |