Beispiel #1
0
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);
    }
}
Beispiel #2
0
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;
}
Beispiel #3
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);
}