1 #ifndef __curl_cpp_curl_multi_HPP__
2 # define __curl_cpp_curl_multi_HPP__
5 # include <curl/curl.h>
37 const long error_code;
39 Exception(
long err_code_arg);
42 auto what()
const noexcept ->
const char*;
48 void *curl_multi =
nullptr;
49 std::size_t handles = 0;
58 template <
class perform_callback_t,
class T>
59 void callback_on_finished_easy(perform_callback_t &&perform_callback, T &&arg)
63 std::forward<perform_callback_t>(perform_callback)(ret.first, std::move(ret.second), *
this,
64 std::forward<T>(arg));
67 auto perform_impl()
noexcept -> perform_ret_t;
68 auto multi_socket_action_impl(curl_socket_t socketfd,
int ev_bitmask)
noexcept ->
86 Multi_t(
const Multi_t&) =
delete;
116 std::size_t get_number_of_handles()
const noexcept;
150 auto poll(curl_waitfd *extra_fds =
nullptr,
unsigned extra_nfds = 0U,
int timeout = 0)
noexcept ->
161 auto break_or_poll(curl_waitfd *extra_fds =
nullptr,
unsigned extra_nfds = 0U,
int timeout = 0)
noexcept ->
186 template <
class perform_callback_t,
class T>
187 auto perform(perform_callback_t &&perform_callback, T &&arg)
noexcept -> perform_ret_t
189 auto ret = perform_impl();
190 callback_on_finished_easy(std::forward<perform_callback_t>(perform_callback), std::forward<T>(arg));
202 using socket_callback_t =
int (*)(CURL *curl_easy,
226 using timer_callback_t =
int (*)(CURLM *multi,
long timeout_ms,
void *userp);
236 timer_callback_t timer_callback,
void *timer_data)
noexcept;
246 auto multi_assign(curl_socket_t socketfd,
void *per_sockptr)
noexcept ->
247 Ret_except<
void, std::invalid_argument>;
276 template <
class perform_callback_t,
class T>
278 perform_callback_t &&perform_callback, T &&arg)
noexcept -> perform_ret_t
280 auto ret = multi_socket_action_impl(socketfd, ev_bitmask);
281 callback_on_finished_easy(std::forward<perform_callback_t>(perform_callback), std::forward<T>(arg));
291 auto check_perform(
long code,
int running_handles_tmp,
const char *fname)
noexcept ->