From 7114ca6208d3dffe685b994f0802c90727303fc8 Mon Sep 17 00:00:00 2001 From: Dave Reisner Date: Mon, 7 Nov 2016 10:21:22 -0500 Subject: 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 --- lib/libalpm/dload.c | 46 +++------------------------------------------- 1 file changed, 3 insertions(+), 43 deletions(-) (limited to 'lib/libalpm') 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); -- cgit v1.2.3-24-g4f1b