HTTP: Use curl_multi_wait everywhere
Also check the result of the curl methods, in case they fail
This commit is contained in:
parent
ab8795f6dc
commit
d0f24229b2
@ -183,32 +183,22 @@ void Client::update(int waitTimeout)
|
|||||||
}
|
}
|
||||||
|
|
||||||
int remainingActive, messagesInQueue;
|
int remainingActive, messagesInQueue;
|
||||||
#if defined(SG_MAC)
|
int numFds;
|
||||||
// Mac 10.8 libCurl lacks this, let's keep compat for now
|
CURLMcode mc = curl_multi_wait(d->curlMulti, NULL, 0, waitTimeout, &numFds);
|
||||||
fd_set curlReadFDs, curlWriteFDs, curlErrorFDs;
|
if (mc != CURLM_OK) {
|
||||||
int maxFD;
|
SG_LOG(SG_IO, SG_WARN, "curl_multi_wait failed:" << curl_multi_strerror(mc));
|
||||||
curl_multi_fdset(d->curlMulti,
|
return;
|
||||||
&curlReadFDs,
|
|
||||||
&curlWriteFDs,
|
|
||||||
&curlErrorFDs,
|
|
||||||
&maxFD);
|
|
||||||
|
|
||||||
struct timeval timeout;
|
|
||||||
long t;
|
|
||||||
|
|
||||||
curl_multi_timeout(d->curlMulti, &t);
|
|
||||||
if ((t < 0) || (t > waitTimeout)) {
|
|
||||||
t = waitTimeout;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
timeout.tv_sec = t / 1000;
|
mc = curl_multi_perform(d->curlMulti, &remainingActive);
|
||||||
timeout.tv_usec = (t % 1000) * 1000;
|
if (mc == CURLM_CALL_MULTI_PERFORM) {
|
||||||
::select(maxFD, &curlReadFDs, &curlWriteFDs, &curlErrorFDs, &timeout);
|
// we could loop here, but don't want to get blocked
|
||||||
#else
|
// also this shouldn't ocurr in any modern libCurl
|
||||||
int numFds;
|
curl_multi_perform(d->curlMulti, &remainingActive);
|
||||||
curl_multi_wait(d->curlMulti, NULL, 0, waitTimeout, &numFds);
|
} else if (mc != CURLM_OK) {
|
||||||
#endif
|
SG_LOG(SG_IO, SG_WARN, "curl_multi_perform failed:" << curl_multi_strerror(mc));
|
||||||
curl_multi_perform(d->curlMulti, &remainingActive);
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
CURLMsg* msg;
|
CURLMsg* msg;
|
||||||
while ((msg = curl_multi_info_read(d->curlMulti, &messagesInQueue))) {
|
while ((msg = curl_multi_info_read(d->curlMulti, &messagesInQueue))) {
|
||||||
|
Loading…
Reference in New Issue
Block a user