+static PollMgr instance;
+
+PollMgr & PollMgr::Instance() { return instance; }
+
+class wait_manager {
+ public:
+ virtual void watch_fd(int fd, poll_flag flag) = 0;
+ virtual bool unwatch_fd(int fd, poll_flag flag) = 0;
+ virtual void wait_ready(vector<int> & readable, vector<int> & writable) = 0;
+ virtual ~wait_manager() throw() {}
+};
+
+class SelectAIO : public wait_manager {
+ public :
+ SelectAIO();
+ ~SelectAIO() {}
+ void watch_fd(int fd, poll_flag flag);
+ bool unwatch_fd(int fd, poll_flag flag);
+ void wait_ready(vector<int> & readable, vector<int> & writable);
+
+ private:
+ fd_set rfds_, wfds_;
+ int highfds_;
+ file_t pipe_[2];
+ mutex m_;
+};