evtpoll.h 2.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889
  1. #ifndef _TOOLKIT_EVENT_POLL_H_
  2. #define _TOOLKIT_EVENT_POLL_H_
  3. #ifndef _WIN32
  4. #include "config.h"
  5. #include <sys/epoll.h>
  6. /*
  7. edge-triggered(ET): use this flag, the app should use nonblock fd
  8. level-triggered(LT): default
  9. */
  10. #define MAX_EPOLL_EVENT 1024
  11. /*event mask*/
  12. #define EV_READ EPOLLIN
  13. #define EV_ACCEPT EPOLLIN
  14. #define EV_WRITE EPOLLOUT
  15. /*to disable the associated fd after the receipt of an event*/
  16. #define EV_READ_ONCE (EPOLLIN | EPOLLONESHOT)
  17. #define EV_WRITE_ONCE (EPOLLOUT | EPOLLONESHOT)
  18. #define EV_READ_WRITE_WITH_LT_FULL (EPOLLOUT | EPOLLIN | EPOLLERR | EPOLLHUP)
  19. #define EV_READ_WRITE_WITH_LT_PURE (EPOLLOUT | EPOLLIN)
  20. #define DEFAULT_INTEREST_OP_COUNT 3
  21. #define EV_INTEREST_ENTRY_IN_IDX 0
  22. #define EV_INTEREST_ENTRY_OUT_IDX 1
  23. #define EV_INTEREST_ENTRY_ERR_IDX 2
  24. #define EV_BUS_ENDPOINT (((uint32_t)(1)) << 16)
  25. #ifdef __cplusplus
  26. extern "C" {
  27. #endif
  28. struct event_epoll_data_s;
  29. struct event_epoll_s;
  30. typedef void(*evtpoll_data_cb)(struct event_epoll_s* ep,
  31. struct event_epoll_data_s* d,
  32. unsigned int events);
  33. typedef struct event_epoll_data_s event_epoll_data_t;
  34. typedef struct event_epoll_s evtpoll_t;
  35. event_epoll_data_t* evtpoll_data_new();
  36. TOOLKIT_API void evtpoll_data_destroy(event_epoll_data_t* epoll_data);
  37. TOOLKIT_API int evtpoll_data_set(event_epoll_data_t* epoll_data, int type, int fd, void* data);
  38. TOOLKIT_API int evtpoll_data_get_fd(const event_epoll_data_t* const epoll_data);
  39. TOOLKIT_API int evtpoll_data_get_type(const event_epoll_data_t* const epoll_data);
  40. TOOLKIT_API void evtpoll_data_set_data(event_epoll_data_t* epoll_data, void* data);
  41. TOOLKIT_API void* evtpoll_data_get_data(const event_epoll_data_t* const epoll_data);
  42. TOOLKIT_API evtpoll_t* evtpoll_create();
  43. TOOLKIT_API void evtpoll_destroy(evtpoll_t* evt_poll);
  44. TOOLKIT_API int evtpoll_get_epoll_fd(const evtpoll_t* const evt_poll);
  45. /** this function would remove the epoll mask at event*/
  46. TOOLKIT_API int evtpoll_deal(evtpoll_t* ep, struct epoll_event* event, void** data, int cancel);
  47. TOOLKIT_API int evtpoll_wait(evtpoll_t* ep, struct epoll_event event_array[], int event_array_size, int timeout);
  48. TOOLKIT_API int evtpoll_attach(evtpoll_t* ep, int interest_fd);
  49. TOOLKIT_API void evtpoll_detach(evtpoll_t* ep, int interest_fd);
  50. TOOLKIT_API int evtpoll_subscribe(evtpoll_t* ep, int event_mask, int fd, void* rdata, void* wdata);
  51. TOOLKIT_API int evtpoll_unsubscribe(evtpoll_t* ep, int event_mask, int fd, int only_reset, void** rdata, void** wdata);
  52. TOOLKIT_API int evtpoll_loop(evtpoll_t* ep, int timeout);
  53. #ifdef __cplusplus
  54. } // extern "C" {
  55. #endif
  56. #endif //NOT _WIN32
  57. #endif //_TOOLKIT_EVENT_POLL_H_