io_watcher.h 1.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354
  1. #ifndef IO_WATCHER_H_
  2. #define IO_WATCHER_H_
  3. #include "hloop.h"
  4. int hloop_iowatcher_init(hloop_t* loop);
  5. int hloop_iowatcher_cleanup(hloop_t* loop);
  6. int hloop_handle_ios(hloop_t* loop, int timeout);
  7. #include "hplatform.h"
  8. #if !defined(EVENT_SELECT) && !defined(EVENT_POLL) && !defined(EVENT_EPOLL) && \
  9. !defined(EVENT_IOCP) && !defined(EVENT_KQUEUE) && !defined(EVENT_NOEVENT)
  10. #ifdef OS_WIN
  11. #define EVENT_IOCP
  12. #elif defined(OS_LINUX)
  13. #define EVENT_EPOLL
  14. #elif defined(OS_MAC)
  15. #define EVENT_KQUEUE
  16. #elif defined(OS_BSD)
  17. #define EVENT_KQUEUE
  18. #else
  19. #define EVENT_SELECT
  20. #endif
  21. #endif
  22. #if defined(EVENT_POLL)
  23. #include <sys/poll.h>
  24. #define READ_EVENT POLLIN
  25. #define WRITE_EVENT POLLOUT
  26. #elif defined(EVENT_EPOLL)
  27. #include <sys/epoll.h>
  28. #define READ_EVENT EPOLLIN
  29. #define WRITE_EVENT EPOLLOUT
  30. #elif defined(EVENT_KQUEUE)
  31. #include <sys/event.h>
  32. #define READ_EVENT EVFILT_READ
  33. #define WRITE_EVENT EVFILT_WRITE
  34. #else
  35. #define READ_EVENT 0x0001
  36. #define WRITE_EVENT 0x0004
  37. #endif
  38. #define ALL_EVENTS READ_EVENT|WRITE_EVENT
  39. #define READ_INDEX 0
  40. #define WRITE_INDEX 1
  41. #define EVENT_INDEX(type) ((type == READ_EVENT) ? READ_INDEX : WRITE_INDEX)
  42. int iowatcher_init(hloop_t* loop);
  43. int iowatcher_cleanup(hloop_t* loop);
  44. int iowatcher_add_event(hio_t* fd, int events);
  45. int iowatcher_del_event(hio_t* fd, int events);
  46. int iowatcher_poll_events(hloop_t* loop, int timeout);
  47. #endif