add epoll refactor