static void inet_sch_task_sock_event_cb(EV_P_ struct ev_io *w, int revents) { inet_sch_manage_t mgr; inet_sch_task_t task; CURLMcode rc; int action; task = (inet_sch_task_t)w->data; assert(task); mgr = task->m_mgr; action = (revents & EV_READ?CURL_POLL_IN : 0) | ( revents & EV_WRITE?CURL_POLL_OUT : 0); rc = curl_multi_socket_action(task->m_mgr->m_multi, w->fd, action, &mgr->m_still_running); if (rc != CURLM_OK) { CPE_ERROR( mgr->m_em, "%s: sock_event_cb: curl_multi_socket_handle fail, %s(%d)!", inet_sch_manage_name(task->m_mgr), inet_sch_curl_code_msg(rc), rc); return; } inet_sch_process_multi_info(mgr); if (mgr->m_still_running <= 0) { if (mgr->m_debug >= 2) { CPE_INFO( mgr->m_em, "%s: sock_event_cb: no task runing, stop timer!", inet_sch_manage_name(task->m_mgr)); } ev_timer_stop(mgr->m_loop, &mgr->m_timer_event); } }
int inet_sch_task_run(inet_sch_task_t task) { CURLMcode rc; assert(task); if (task->m_state != inet_sch_task_state_init) { CPE_ERROR( task->m_mgr->m_em, "%s: run task: task run in error state %d!", inet_sch_manage_name(task->m_mgr), task->m_state); return -1; } rc = curl_multi_add_handle(task->m_mgr->m_multi, task->m_handler); if (rc != CURLM_OK) { CPE_ERROR( task->m_mgr->m_em, "%s: run task: curl_multi_add_handle fail, %s(%d)!", inet_sch_manage_name(task->m_mgr), inet_sch_curl_code_msg(rc), rc); return -1; } task->m_state = inet_sch_task_state_runing; return 0; }
static void inet_sch_timer_cb(EV_P_ struct ev_timer *w, int revents) { CURLMcode rc; inet_sch_manage_t mgr = (inet_sch_manage_t)w->data; if (mgr->m_debug >= 2) { CPE_INFO( mgr->m_em, "%s: timer: event=%d", inet_sch_manage_name(mgr), revents); } rc = curl_multi_socket_action(mgr->m_multi, CURL_SOCKET_TIMEOUT, 0, &mgr->m_still_running); if (rc != CURLM_OK) { CPE_ERROR( mgr->m_em, "%s: timer: curl_multi_socket_action fail, %d(%s)", inet_sch_manage_name(mgr), rc, inet_sch_curl_code_msg(rc)); } inet_sch_process_multi_info(mgr); }