80 snprintf(filename, 50,
"%d.download", num);
82 file = fopen(filename,
"wb");
84 fprintf(stderr,
"Error opening %s\n", filename);
93 fprintf(stderr,
"Added download %s -> %s\n", url, filename);
105 switch(message->
msg) {
116 printf(
"%s DONE\n", done_url);
126 fprintf(stderr,
"CURLMSG default\n");
138 if(events & UV_READABLE)
140 if(events & UV_WRITABLE)
183 curl_context = socketp ?
189 events |= UV_WRITABLE;
191 events |= UV_READABLE;
209 int main(
int argc,
char **argv)
211 loop = uv_default_loop();
217 fprintf(stderr,
"Could not init curl\n");
231 uv_run(
loop, UV_RUN_DEFAULT);
CURL_EXTERN CURLMcode curl_multi_add_handle(CURLM *multi_handle, CURL *curl_handle)
CURL_EXTERN CURLMcode curl_multi_assign(CURLM *multi_handle, curl_socket_t sockfd, void *sockp)
static curl_context_t * create_curl_context(curl_socket_t sockfd)
#define curl_easy_setopt(handle, option, value)
static void check_multi_info(void)
CURL_EXTERN CURLM * curl_multi_init(void)
#define curl_multi_setopt(handle, opt, param)
#define curl_easy_getinfo(handle, info, arg)
struct curl_context_s curl_context_t
CURL_EXTERN CURL * curl_easy_init(void)
CURL_EXTERN void curl_easy_cleanup(CURL *curl)
static void destroy_curl_context(curl_context_t *context)
static int handle_socket(CURL *easy, curl_socket_t s, int action, void *userp, void *socketp)
int main(int argc, char **argv)
static void add_download(const char *url, int num)
CURL_EXTERN CURLMcode curl_multi_remove_handle(CURLM *multi_handle, CURL *curl_handle)
#define CURL_SOCKET_TIMEOUT
CURL_EXTERN CURLcode curl_global_init(long flags)
curl_global_init() globally initializes curl given a bitwise set of the different features of what to...
static void curl_perform(uv_poll_t *req, int status, int events)
CURL_EXTERN CURLMsg * curl_multi_info_read(CURLM *multi_handle, int *msgs_in_queue)
static int start_timeout(CURLM *multi, long timeout_ms, void *userp)
static void on_timeout(uv_timer_t *req)
static CURL * easy[MAX_EASY_HANDLES]
static void curl_close_cb(uv_handle_t *handle)
CURL_EXTERN CURLMcode curl_multi_socket_action(CURLM *multi_handle, curl_socket_t s, int ev_bitmask, int *running_handles)
CURL_EXTERN CURLMcode curl_multi_cleanup(CURLM *multi_handle)