lib/curl/Multi: add SetSocketFunction(), SetTimerFunction()

This commit is contained in:
Max Kellermann 2024-07-31 10:04:31 +02:00 committed by Max Kellermann
parent 959826d1d1
commit f7790430a0
2 changed files with 14 additions and 5 deletions

View File

@ -84,11 +84,8 @@ CurlGlobal::CurlGlobal(EventLoop &_loop)
:defer_read_info(_loop, BIND_THIS_METHOD(ReadInfo)), :defer_read_info(_loop, BIND_THIS_METHOD(ReadInfo)),
timeout_event(_loop, BIND_THIS_METHOD(OnTimeout)) timeout_event(_loop, BIND_THIS_METHOD(OnTimeout))
{ {
multi.SetOption(CURLMOPT_SOCKETFUNCTION, CurlSocket::SocketFunction); multi.SetSocketFunction(CurlSocket::SocketFunction, this);
multi.SetOption(CURLMOPT_SOCKETDATA, this); multi.SetTimerFunction(TimerFunction, this);
multi.SetOption(CURLMOPT_TIMERFUNCTION, TimerFunction);
multi.SetOption(CURLMOPT_TIMERDATA, this);
} }
int int

View File

@ -61,6 +61,18 @@ public:
throw std::runtime_error(curl_multi_strerror(code)); throw std::runtime_error(curl_multi_strerror(code));
} }
void SetSocketFunction(int (*function)(CURL *easy, curl_socket_t s, int what, void *clientp, void *socketp) noexcept,
void *clientp) {
SetOption(CURLMOPT_SOCKETFUNCTION, function);
SetOption(CURLMOPT_SOCKETDATA, clientp);
}
void SetTimerFunction(int (*function)(CURLM *multi, long timeout_ms, void *clientp) noexcept,
void *clientp) {
SetOption(CURLMOPT_TIMERFUNCTION, function);
SetOption(CURLMOPT_TIMERDATA, clientp);
}
void Add(CURL *easy) { void Add(CURL *easy) {
auto code = curl_multi_add_handle(handle, easy); auto code = curl_multi_add_handle(handle, easy);
if (code != CURLM_OK) if (code != CURLM_OK)