Recent versions of curl can suggest a period of time the library user should sleep and try again, when curl is blocked on reading or writing (or connecting). Use this timeout instead of always sleeping for 50ms. --- http.c | 22 ++++++++++++++++++++-- 1 files changed, 20 insertions(+), 2 deletions(-) diff --git a/http.c b/http.c index ae92318..e91a2ab 100644 --- a/http.c +++ b/http.c @@ -649,6 +649,9 @@ void run_active_slot(struct active_request_slot *slot) fd_set excfds; int max_fd; struct timeval select_timeout; +#if LIBCURL_VERSION_NUM >= 0x070f04 + long curl_timeout; +#endif int finished = 0; slot->finished = &finished; @@ -664,13 +667,28 @@ void run_active_slot(struct active_request_slot *slot) } if (slot->in_use && !data_received) { +#if LIBCURL_VERSION_NUM >= 0x070f04 + curl_multi_timeout(curlm, &curl_timeout); + if (curl_timeout == 0) { + continue; + } else if (curl_timeout == -1) { + select_timeout.tv_sec = 0; + select_timeout.tv_usec = 50000; + } else { + select_timeout.tv_sec = curl_timeout / 1000; + select_timeout.tv_usec = (curl_timeout % 1000) * 1000; + } +#else + select_timeout.tv_sec = 0; + select_timeout.tv_usec = 50000; +#endif + max_fd = -1; FD_ZERO(&readfds); FD_ZERO(&writefds); FD_ZERO(&excfds); curl_multi_fdset(curlm, &readfds, &writefds, &excfds, &max_fd); - select_timeout.tv_sec = 0; - select_timeout.tv_usec = 50000; + select(max_fd+1, &readfds, &writefds, &excfds, &select_timeout); } } -- 1.7.8.rc0.33.g09c6f.dirty -- To unsubscribe from this list: send the line "unsubscribe git" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html