#ifndef _TOOLKIT_EVENT_POLL_H_ #define _TOOLKIT_EVENT_POLL_H_ #ifndef _WIN32 #include "config.h" #include /* edge-triggered(ET): use this flag, the app should use nonblock fd level-triggered(LT): default */ #define MAX_EPOLL_EVENT 1024 /*event mask*/ #define EV_READ EPOLLIN #define EV_ACCEPT EPOLLIN #define EV_WRITE EPOLLOUT /*to disable the associated fd after the receipt of an event*/ #define EV_READ_ONCE (EPOLLIN | EPOLLONESHOT) #define EV_WRITE_ONCE (EPOLLOUT | EPOLLONESHOT) #define EV_READ_WRITE_WITH_LT_FULL (EPOLLOUT | EPOLLIN | EPOLLERR | EPOLLHUP) #define EV_READ_WRITE_WITH_LT_PURE (EPOLLOUT | EPOLLIN) #define DEFAULT_INTEREST_OP_COUNT 3 #define EV_INTEREST_ENTRY_IN_IDX 0 #define EV_INTEREST_ENTRY_OUT_IDX 1 #define EV_INTEREST_ENTRY_ERR_IDX 2 #define EV_BUS_ENDPOINT (((uint32_t)(1)) << 16) #ifdef __cplusplus extern "C" { #endif struct event_epoll_data_s; struct event_epoll_s; typedef void(*evtpoll_data_cb)(struct event_epoll_s* ep, struct event_epoll_data_s* d, unsigned int events); typedef struct event_epoll_data_s event_epoll_data_t; typedef struct event_epoll_s evtpoll_t; event_epoll_data_t* evtpoll_data_new(); TOOLKIT_API void evtpoll_data_destroy(event_epoll_data_t* epoll_data); TOOLKIT_API int evtpoll_data_set(event_epoll_data_t* epoll_data, int type, int fd, void* data); TOOLKIT_API int evtpoll_data_get_fd(const event_epoll_data_t* const epoll_data); TOOLKIT_API int evtpoll_data_get_type(const event_epoll_data_t* const epoll_data); TOOLKIT_API void evtpoll_data_set_data(event_epoll_data_t* epoll_data, void* data); TOOLKIT_API void* evtpoll_data_get_data(const event_epoll_data_t* const epoll_data); TOOLKIT_API evtpoll_t* evtpoll_create(); TOOLKIT_API void evtpoll_destroy(evtpoll_t* evt_poll); TOOLKIT_API int evtpoll_get_epoll_fd(const evtpoll_t* const evt_poll); /** this function would remove the epoll mask at event*/ TOOLKIT_API int evtpoll_deal(evtpoll_t* ep, struct epoll_event* event, void** data, int cancel); TOOLKIT_API int evtpoll_wait(evtpoll_t* ep, struct epoll_event event_array[], int event_array_size, int timeout); TOOLKIT_API int evtpoll_attach(evtpoll_t* ep, int interest_fd); TOOLKIT_API void evtpoll_detach(evtpoll_t* ep, int interest_fd); TOOLKIT_API int evtpoll_subscribe(evtpoll_t* ep, int event_mask, int fd, void* rdata, void* wdata); TOOLKIT_API int evtpoll_unsubscribe(evtpoll_t* ep, int event_mask, int fd, int only_reset, void** rdata, void** wdata); TOOLKIT_API int evtpoll_loop(evtpoll_t* ep, int timeout); #ifdef __cplusplus } // extern "C" { #endif #endif //NOT _WIN32 #endif //_TOOLKIT_EVENT_POLL_H_