X-Git-Url: https://git.m6w6.name/?p=m6w6%2Fext-http;a=blobdiff_plain;f=http_request_pool_api.c;h=154161404a4f3d0cb8f9c6cf9f1df4770ff6c59f;hp=5b04472566e05111f51d04e56216dabcc6407561;hb=fed554c3b8ad4c438be77b35bed5bf6b8edfcf71;hpb=6aca56d611a22eb559098f3c02c31634a6f9ff9f diff --git a/http_request_pool_api.c b/http_request_pool_api.c index 5b04472..1541614 100644 --- a/http_request_pool_api.c +++ b/http_request_pool_api.c @@ -261,13 +261,24 @@ PHP_HTTP_API STATUS _http_request_pool_select(http_request_pool *pool) int MAX; fd_set R, W, E; struct timeval timeout = {1, 0}; +#ifdef HAVE_CURL_MULTI_TIMEOUT + long max_tout = 1000; + + if ((CURLM_OK == curl_multi_timeout(pool->ch, &max_tout)) && (max_tout != -1)) { + timeout.tv_sec = max_tout / 1000; + timeout.tv_usec = (max_tout % 1000) * 1000; + } +#endif FD_ZERO(&R); FD_ZERO(&W); FD_ZERO(&E); if (CURLM_OK == curl_multi_fdset(pool->ch, &R, &W, &E, &MAX)) { - if (MAX == -1 || SELECT_ERROR != select(MAX + 1, &R, &W, &E, &timeout)) { + if (MAX == -1) { + http_sleep((double) timeout.tv_sec + (double) (timeout.tv_usec / HTTP_MCROSEC)); + return SUCCESS; + } else if (SELECT_ERROR != select(MAX + 1, &R, &W, &E, &timeout)) { return SUCCESS; } }