4 #include <sys/select.h>
12 #define MAX_POLL_FDS 128
24 virtual void watch_fd(int fd, poll_flag flag) = 0;
25 virtual bool unwatch_fd(int fd, poll_flag flag) = 0;
26 virtual bool is_watched(int fd, poll_flag flag) = 0;
27 virtual void wait_ready(std::vector<int> *readable, std::vector<int> *writable) = 0;
33 virtual void read_cb(int fd) = 0;
34 virtual void write_cb(int fd) = 0;
35 virtual ~aio_callback() {}
43 static PollMgr *Instance();
44 static PollMgr *CreateInst();
46 void add_callback(int fd, poll_flag flag, aio_callback *ch);
47 void del_callback(int fd, poll_flag flag);
48 bool has_callback(int fd, poll_flag flag, aio_callback *ch);
49 void block_remove_fd(int fd);
53 static PollMgr *instance;
59 std::condition_variable changedone_c_;
62 aio_callback *callbacks_[MAX_POLL_FDS];
68 class SelectAIO : public aio_mgr {
73 void watch_fd(int fd, poll_flag flag);
74 bool unwatch_fd(int fd, poll_flag flag);
75 bool is_watched(int fd, poll_flag flag);
76 void wait_ready(std::vector<int> *readable, std::vector<int> *writable);
90 class EPollAIO : public aio_mgr {
94 void watch_fd(int fd, poll_flag flag);
95 bool unwatch_fd(int fd, poll_flag flag);
96 bool is_watched(int fd, poll_flag flag);
97 void wait_ready(std::vector<int> *readable, std::vector<int> *writable);
101 struct epoll_event ready_[MAX_POLL_FDS];
102 int fdstatus_[MAX_POLL_FDS];
107 #endif /* pollmgr_h */