--- epoll_reactor.hpp 2011-10-11 10:28:00.000000000 +0800 +++ epoll_reactor.hpp.new 2011-10-11 10:27:41.000000000 +0800 @@ -65,7 +65,7 @@ epoll_reactor(boost::asio::io_service& io_service) : boost::asio::detail::service_base >(io_service), mutex_(), - epoll_fd_(do_epoll_create()), + epoll_fd_(-1), wait_in_progress_(false), interrupter_(), read_op_queue_(), @@ -77,6 +77,8 @@ shutdown_(false), need_epoll_wait_(true) { + epoll_fd_ = do_epoll_create(); + // Start the reactor's internal thread only if needed. if (Own_Thread) { @@ -96,7 +98,9 @@ ~epoll_reactor() { shutdown_service(); - close(epoll_fd_); + + if (epoll_fd_ != -1) + close(epoll_fd_); } // Destroy all user-defined handler objects owned by the service.