예제 #1
0
파일: aiop.c 프로젝트: cdrr/tbox
tb_aioo_ref_t tb_aiop_addo(tb_aiop_ref_t aiop, tb_socket_ref_t sock, tb_size_t code, tb_cpointer_t priv)
{
    // check
    tb_aiop_impl_t* impl = (tb_aiop_impl_t*)aiop;
    tb_assert_and_check_return_val(impl && impl->rtor && impl->rtor->addo && sock, tb_null);
    tb_assert(tb_aiop_have(aiop, code));

    // done
    tb_bool_t       ok = tb_false;
    tb_aioo_ref_t   aioo = tb_null;
    do
    {
        // init aioo
        aioo = tb_aiop_aioo_init(impl, sock, code, priv);
        tb_assert_and_check_break(aioo);
        
        // addo aioo
        if (!impl->rtor->addo(impl->rtor, (tb_aioo_impl_t*)aioo)) break;

        // ok
        ok = tb_true;

    } while (0);

    // failed? remove aioo
    if (!ok && aioo) 
    {
        tb_aiop_aioo_exit(impl, aioo);
        aioo = tb_null;
    }

    // ok?
    return aioo;
}
예제 #2
0
파일: aiop.c 프로젝트: cdrr/tbox
tb_void_t tb_aiop_delo(tb_aiop_ref_t aiop, tb_aioo_ref_t aioo)
{
    // check
    tb_aiop_impl_t* impl = (tb_aiop_impl_t*)aiop;
    tb_assert_and_check_return(impl && impl->rtor && impl->rtor->delo && aioo);

    // delo aioo
    if (impl->rtor->delo(impl->rtor, (tb_aioo_impl_t*)aioo)) tb_aiop_aioo_exit(impl, aioo);
}
예제 #3
0
파일: aiop.c 프로젝트: AlexShiLucky/tbox
tb_void_t tb_aiop_delo(tb_aiop_ref_t aiop, tb_aioo_ref_t aioo)
{
    // check
    tb_aiop_impl_t* impl = (tb_aiop_impl_t*)aiop;
    tb_assert_and_check_return(impl && impl->rtor && impl->rtor->delo && aioo);

    // delete aioo from aiop
    if (!impl->rtor->delo(impl->rtor, (tb_aioo_impl_t*)aioo))
    {
        // trace
        tb_trace_e("delo: aioo[%p] failed!", aioo);
    }
    
    // exit aioo
    tb_aiop_aioo_exit(impl, aioo);
}