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)),
timeout_event(_loop, BIND_THIS_METHOD(OnTimeout))
{
multi.SetOption(CURLMOPT_SOCKETFUNCTION, CurlSocket::SocketFunction);
multi.SetOption(CURLMOPT_SOCKETDATA, this);
multi.SetOption(CURLMOPT_TIMERFUNCTION, TimerFunction);
multi.SetOption(CURLMOPT_TIMERDATA, this);
multi.SetSocketFunction(CurlSocket::SocketFunction, this);
multi.SetTimerFunction(TimerFunction, this);
}
int

View File

@ -61,6 +61,18 @@ public:
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) {
auto code = curl_multi_add_handle(handle, easy);
if (code != CURLM_OK)