[pacman-dev] [PATCH] dload: use curl's keepalive mechanism
Dave Reisner
dreisner at archlinux.org
Mon Nov 7 15:21:22 UTC 2016
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.
---
lib/libalpm/dload.c | 46 +++-------------------------------------------
1 file changed, 3 insertions(+), 43 deletions(-)
diff --git a/lib/libalpm/dload.c b/lib/libalpm/dload.c
index 9d80358..ccd70d9 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);
--
2.10.2
More information about the pacman-dev
mailing list