4 #include <sys/select.h>
11 #define MAX_POLL_FDS 128
23 virtual void watch_fd(int fd, poll_flag flag) = 0;
24 virtual bool unwatch_fd(int fd, poll_flag flag) = 0;
25 virtual bool is_watched(int fd, poll_flag flag) = 0;
26 virtual void wait_ready(std::vector<int> *readable, std::vector<int> *writable) = 0;
32 virtual void read_cb(int fd) = 0;
33 virtual void write_cb(int fd) = 0;
34 virtual ~aio_callback() {}
42 static PollMgr *Instance();
43 static PollMgr *CreateInst();
45 void add_callback(int fd, poll_flag flag, aio_callback *ch);
46 void del_callback(int fd, poll_flag flag);
47 bool has_callback(int fd, poll_flag flag, aio_callback *ch);
48 void block_remove_fd(int fd);
52 static PollMgr *instance;
58 pthread_cond_t changedone_c_;
61 aio_callback *callbacks_[MAX_POLL_FDS];
67 class SelectAIO : public aio_mgr {
72 void watch_fd(int fd, poll_flag flag);
73 bool unwatch_fd(int fd, poll_flag flag);
74 bool is_watched(int fd, poll_flag flag);
75 void wait_ready(std::vector<int> *readable, std::vector<int> *writable);
89 class EPollAIO : public aio_mgr {
93 void watch_fd(int fd, poll_flag flag);
94 bool unwatch_fd(int fd, poll_flag flag);
95 bool is_watched(int fd, poll_flag flag);
96 void wait_ready(std::vector<int> *readable, std::vector<int> *writable);
100 struct epoll_event ready_[MAX_POLL_FDS];
101 int fdstatus_[MAX_POLL_FDS];
106 #endif /* pollmgr_h */