[PATCH v3 2/3] http.c: Use timeout suggested by curl instead of fixed 50ms timeout
- From
Mika Fischer <mika.fischer@zoopnet.de>
- Date
- Nov 4, 2011, 14:19 UTC
- Message-ID
- <1320416367-28843-3-git-send-email-mika.fischer@zoopnet.de>
- In-Reply-To
- <1320416367-28843-1-git-send-email-mika.fischer@zoopnet.de>
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.
Signed-off-by: Mika Fischer <mika.fischer@zoopnet.de> --- 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.35.gd9f16.dirty