Зачем изменять возвращаемое значение curl_multi_timeout ()? - PullRequest
1 голос
/ 02 мая 2011

Этот пример кода содержит:

curl_multi_timeout(multi_handle, &curl_timeo);
if(curl_timeo >= 0) {
  timeout.tv_sec = curl_timeo / 1000;
  if(timeout.tv_sec > 1)
    timeout.tv_sec = 1;
  else
    timeout.tv_usec = (curl_timeo % 1000) * 1000;
}

Почему tv_sec обрезается до 1 секунды? Почему значение, возвращаемое curl_multi_timeout(), не используется как есть (после деления на 1000)?

Если есть веская причина для вышесказанного, то есть ли случай, когда вы НЕ обрежете значение до 1 секунды? Что это за случай?

1 Ответ

1 голос
/ 02 мая 2011

Код просто устанавливает максимальное время ожидания для последующего вызова на select(). Во всяком случае, это выглядит как ошибка. Похоже, что код защищает себя от необоснованного ответа от curl_multi_timeout(). Я предполагаю, что кодер подумал: «Если функция тайм-аута curl возвращает что-то более одной минуты, то не ждите дольше». ... а затем приступил к опечатке одну минуту как одну секунду. Вероятно, следует делать

if (timeout.tv_sec > 60) {
    timeout.tv_sec = 60;
else if (timeout.tv_sec == 0) {
    timeout.tv_usec = curl_timeo * 1000;
}

Мод на 1000 не нужен, поскольку curl_multi_timeout() возвращает миллисекунды, поэтому, если tv_sec равно нулю, это означает, что возвращаемое значение находится в диапазоне 0 - 999.

...