Libcurl - как работает параметр CURLMOPT_TIMERFUNCTION
От: Optimus1  
Дата: 23.12.21 19:36
Оценка:
Здравствуйте,

Я допускаю, что я полный тугодум, но я ни черта не могу понять, как работает параметр CURLMOPT_TIMERFUNCTION в либкурле: https://curl.se/libcurl/c/CURLMOPT_TIMERFUNCTION.html





timer_callback(CURLM *multi, long timeout_ms, void *userp)
{
//какой то код
}
 
curl_multi_setopt(curl_multi_handle, CURLMOPT_TIMERFUNCTION,  timer_callback);





Некоторые функции, такие как таймауты и повторные попытки, требуют вызова libcurl, даже если дескрипторы файлов не выполняются.



Нафига ??


Значение timeout_ms, равное -1, переданное этому обратному вызову, означает, что вы должны удалить таймер. Все остальные значения являются допустимыми сроками действия в миллисекундах.


Переданное кем ?? Я что должен этот кол-бэк еще вызывать ?? Зачем и откуда ???



Ваша функция обратного вызова timer_callback должна установить неповторяющийся таймер со временем истечения timeout_ms миллисекунд. Когда сработает этот таймер, вызовите либо curl_multi_socket_action, либо curl_multi_perform , в зависимости от того, какой интерфейс вы используете.


Зачем мне вызывать curl_multi_socket_action() из кол-бэка таймера, если мне нужно его вызвать из той части когда, где сработало событие на сокете от ОС — оповещающее меня, что сокет готов или к записи или к чтению и в этот момент я бы и вызвал curl_multi_socket_action(). На какой черт нужны какие то таймеры или откуда их вызывать то ???
И зачем тогда вообще вызывать таймер, если можно сразу вызвать curl_multi_socket_action()??


Ваша функция обратного вызова timer_callback должна установить неповторяющийся таймер...

Что значит не повторяющийся ? А если он повторится ?


Или я полный идиот или документация либкурл так "хорошо" написана, специально, чтобы поменьше народу им использовалось.
Я просто реально физически не могу представить в каком месте кода при осуществлении к примеру GET запроса — этот чёртов таймер должен быть, как то вызван и зачем.
Отредактировано 23.12.2021 19:42 Optimus1 . Предыдущая версия .
libcurl
Re: Libcurl - как работает параметр CURLMOPT_TIMERFUNCTION
От: reversecode google
Дата: 23.12.21 19:47
Оценка:
- купить книгу — гугл для чайников, и читать до просветления
— когда просветление наступит и найдете готовые примеры использование, прочитать их от начала до дна
— если ничего не поняли, пройти на курсы выпечке печенек или курсы работы веником, разнорабочие нынче тоже нужны,а кодинг это не ваше, смиритесь уже
Re[2]: Libcurl - как работает параметр CURLMOPT_TIMERFUNCTION
От: Optimus1  
Дата: 23.12.21 20:24
Оценка:
Здравствуйте, reversecode, Вы писали:

R>- купить книгу — гугл для чайников, и читать до просветления

R>- когда просветление наступит и найдете готовые примеры использование, прочитать их от начала до дна
R>- если ничего не поняли, пройти на курсы выпечке печенек или курсы работы веником, разнорабочие нынче тоже нужны,а кодинг это не ваше, смиритесь уже

Спасибо, а по существу заданных вопросов — что нибудь есть ? Или вы из поварих в кодинг пришли ?
Re[3]: Libcurl - как работает параметр CURLMOPT_TIMERFUNCTION
От: Optimus1  
Дата: 23.12.21 20:27
Оценка:
Здравствуйте, Optimus1, Вы писали:

O>Здравствуйте, reversecode, Вы писали:


R>>- купить книгу — гугл для чайников, и читать до просветления

R>>- когда просветление наступит и найдете готовые примеры использование, прочитать их от начала до дна

O>Спасибо, а по существу заданных вопросов — что нибудь есть ? Или вы из поварих в кодинг пришли ?


R>>- если ничего не поняли, пройти на курсы выпечке печенек или курсы работы веником, разнорабочие нынче тоже нужны,а кодинг это не ваше, смиритесь уже

Небольшие размеры свои таким образом компенсируешь ? Смирись уже, таким образом ты не увеличишь
Re: Libcurl - как работает параметр CURLMOPT_TIMERFUNCTION
От: kov_serg Россия  
Дата: 23.12.21 22:03
Оценка:
Здравствуйте, Optimus1, Вы писали:

O>Я допускаю, что я полный тугодум, но я ни черта не могу понять, как работает параметр CURLMOPT_TIMERFUNCTION в либкурле: https://curl.se/libcurl/c/CURLMOPT_TIMERFUNCTION.html

Можно просто на пример внимательно посмотреть:
static gboolean timeout_cb(gpointer user_data);
static int timerfunc(CURLM *multi, long timeout_ms, void *userp) ;
curl_multi_setopt(multi, CURLMOPT_TIMERFUNCTION, timerfunc); // утанавливают обработчик таймеров
//-----------------------------------------------------------------------------------------------
static int timerfunc(CURLM *multi, long timeout_ms, void *userp) { // тут библиотека дёрнет эту функцию когда захочет создать таймер (или пристрелить существующий)
  guint *id = userp;
 
  if (id) g_source_remove(*id); // первый раз пусто
 
  if(timeout_ms == -1) { g_free(id); id = NULL; } 
  else {
    if(!id) id = g_new(guint, 1);
    *id = g_timeout_add(timeout_ms, timeout_cb, id); // организуем вызов через timeout_ms
  }
  curl_multi_setopt(multi, CURLMOPT_TIMERDATA, id); // задаём userp для последующих вызывов либо 0 если убрали
  return 0;
}
//-----------------------------------------------------------------------------------------------
static gboolean timeout_cb(gpointer user_data) { // как только таймер вышел (это уже от реализации ваших таймеров зависит)
  int running;
  if(user_data) { 
    g_free(user_data);
    curl_multi_setopt(curl_handle, CURLMOPT_TIMERDATA, NULL); // освобождаем таймер если еще не успели (например насильно)
  }

  // https://curl.se/libcurl/c/curl_multi_socket_action.html 
  // 6. Call curl_multi_socket_action(..., CURL_SOCKET_TIMEOUT, 0, ...) to kickstart everything. To get one or more callbacks called.
  curl_multi_socket_action(multi, CURL_SOCKET_TIMEOUT, 0, &running); 

  return G_SOURCE_REMOVE;
}



O>Нафига ??

Видимо для того чтобы вы могли свои таймеры использовать.

O>Переданное кем ?? Я что должен этот кол-бэк еще вызывать ?? Зачем и откуда ???

Его будет вызывать библиотека. Для того что бы использовать вашу реализацию таймеров.


O>Зачем мне вызывать curl_multi_socket_action() из кол-бэка таймера, если мне нужно его вызвать из той части когда, где сработало событие на сокете от ОС — оповещающее меня, что сокет готов или к записи или к чтению и в этот момент я бы и вызвал curl_multi_socket_action(). На какой черт нужны какие то таймеры или откуда их вызывать то ???

O>И зачем тогда вообще вызывать таймер, если можно сразу вызвать curl_multi_socket_action()??
to kickstart everything

O>Что значит не повторяющийся ? А если он повторится ?

Имеется ввиду одноразовый. Вышло время один раз вызвали. Одного раза достаточно

O>Или я полный идиот или документация либкурл так "хорошо" написана, специально, чтобы поменьше народу им использовалось.

Просто следует её читать утром, а не вечером. Возможно просто устали.

O>Я просто реально физически не могу представить в каком месте кода при осуществлении к примеру GET запроса — этот чёртов таймер должен быть, как то вызван и зачем.

Видимо нужна была такая гибкость.
Re[4]: Libcurl - как работает параметр CURLMOPT_TIMERFUNCTION
От: reversecode google
Дата: 23.12.21 23:54
Оценка:
если вы интеллектуальный импотент не способный разобраться во множественных примерах которые находятся папочке examples библиотеки libcurl

то уйдите прочь из проф

кстати последний такой присутствующий на форуме
все таки ушел заниматься торговлей бу вещей, что ему и предрекали
вы следующий кандидат за ним
Re[5]: Libcurl - как работает параметр CURLMOPT_TIMERFUNCTIO
От: Optimus1  
Дата: 24.12.21 06:39
Оценка:
Здравствуйте, reversecode, Вы писали:

R>если вы интеллектуальный импотент не способный разобраться во множественных примерах которые находятся папочке examples библиотеки libcurl


Так я оказался прав похоже, ты не только компенсируешь свои маленькие размеры, но твой маленький размер — еще и не работоспособный )))))
Бедняга, тебе девушка так же сказала, когда увидела твоего импотентного малыша — уйди прочь и смирись ? Теперь ты обиженный — всем это будешь повторять ?
Смирись уже
Отредактировано 24.12.2021 6:54 Optimus1 . Предыдущая версия . Еще …
Отредактировано 24.12.2021 6:49 Optimus1 . Предыдущая версия .
Re[2]: Libcurl - как работает параметр CURLMOPT_TIMERFUNCTION
От: Optimus1  
Дата: 24.12.21 06:48
Оценка:
_>Видимо для того чтобы вы могли свои таймеры использовать.

Спасибо за ответы!
Я просто пытался сравнивать свою простенкькую реализацию клиента http 1.1 на win-сокетах на порте завершения IO, у меня не было ни каких таймеров, ну то есть все работает и без таймеров.
-Просто создается порт завершения, обработчик порта завершения.
-Создается очередь сокетов, сокет инициализируется, делается resolve DNS если нужно, connect, сокет связывается с портов завершения и вызывается WSASend/WSARecv
-И в обработчике порта завершения ловятся готовые события на сокете, которыми меня оповещается ОС — и я соответвенно реагирую на них.

Я пытался понять, как, где и зачем — тут может понадобится таймер, так как предполагал, что плюс-минус Libcurl наверное должен быть устроен как то так же
Буду разбирается дальше.
Re[3]: Libcurl - как работает параметр CURLMOPT_TIMERFUNCTION
От: Igore Россия  
Дата: 24.12.21 11:15
Оценка:
Здравствуйте, Optimus1, Вы писали:

O>Я пытался понять, как, где и зачем — тут может понадобится таймер, так как предполагал, что плюс-минус Libcurl наверное должен быть устроен как то так же

O>Буду разбирается дальше.
libcurl идет в составе некоторых ОС(например Win10), используется во множестве проектов, поддерживает десятки протоколов, нуу, так себе пример для сравнения со своей простой реализацией.
Re[4]: Libcurl - как работает параметр CURLMOPT_TIMERFUNCTION
От: Optimus1  
Дата: 24.12.21 11:37
Оценка:
Здравствуйте, Igore, Вы писали:
I>libcurl идет в составе некоторых ОС(например Win10), используется во множестве проектов

И в основном только синхронный curl_easy.


I>поддерживает десятки протоколов,

Как связаны десятки протоколов и принцип управления системой событий ?



I>нуу, так себе пример для сравнения со своей простой реализацией.

С простой реализацией чего ?
Re[5]: Libcurl - как работает параметр CURLMOPT_TIMERFUNCTION
От: Mr.Delphist  
Дата: 24.12.21 11:58
Оценка: +1
Здравствуйте, Optimus1, Вы писали:

I>>нуу, так себе пример для сравнения со своей простой реализацией.

O>С простой реализацией чего ?

Видимо, речь про это?

O>Я просто пытался сравнивать свою простенкькую реализацию клиента http 1.1


Заодно проверить, умеет ли "своя" реализация во все эти редиректы, кэши, chunked-трансферы, multipart, ranges, content encoding и прочая, и прочая
Re[6]: Libcurl - как работает параметр CURLMOPT_TIMERFUNCTIO
От: Optimus1  
Дата: 24.12.21 15:24
Оценка: -1
Здравствуйте, Mr.Delphist, Вы писали:

MD>Здравствуйте, Optimus1, Вы писали:


I>>>нуу, так себе пример для сравнения со своей простой реализацией.

O>>С простой реализацией чего ?

MD>Видимо, речь про это?


O>>Я просто пытался сравнивать свою простенкькую реализацию клиента http 1.1


MD>Заодно проверить, умеет ли "своя" реализация во все эти редиректы, кэши, chunked-трансферы, multipart, ranges, content encoding и прочая, и прочая


Вы не поняли, я сравнивал реализацию не протокола http — своя — libcurl, я собственно за этим libcurl и взял, потому что понял, что даже http 1.1 реализовать со Всеми нюансами не мало времени уйдет, а уже давно есть http2, и тут уже http3 вроде уже принят и реализовывать это самому — ну это до второго пришествия.
Я сравнивал работу системы событий и то, что я не использовал таймеры для ее работы, вот, что я сравнивал.
Отредактировано 24.12.2021 15:25 Optimus1 . Предыдущая версия .
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.