26 #include <condition_variable> 31 #include <unordered_map> 37 #include <sys/select.h> 40 #include <tacopie/network/self_pipe.hpp> 41 #include <tacopie/network/tcp_socket.hpp> 42 #include <tacopie/utils/thread_pool.hpp> 44 #ifndef __TACOPIE_IO_SERVICE_NB_WORKERS 45 #define __TACOPIE_IO_SERVICE_NB_WORKERS 1 93 void track(
const tcp_socket& socket,
const event_callback_t& rd_callback =
nullptr,
const event_callback_t& wr_callback =
nullptr);
144 struct tracked_socket {
147 : rd_callback(nullptr)
148 , wr_callback(nullptr) {}
151 event_callback_t rd_callback;
152 std::atomic<bool> is_executing_rd_callback = ATOMIC_VAR_INIT(
false);
155 event_callback_t wr_callback;
156 std::atomic<bool> is_executing_wr_callback = ATOMIC_VAR_INIT(
false);
159 std::atomic<bool> marked_for_untrack = ATOMIC_VAR_INIT(
false);
175 int init_poll_fds_info(
void);
181 void process_events(
void);
189 void process_rd_event(
const fd_t& fd, tracked_socket& socket);
197 void process_wr_event(
const fd_t& fd, tracked_socket& socket);
203 std::unordered_map<fd_t, tracked_socket> m_tracked_sockets;
208 std::atomic<bool> m_should_stop;
213 std::thread m_poll_worker;
223 std::mutex m_tracked_sockets_mtx;
228 std::vector<fd_t> m_polled_fds;
243 std::condition_variable m_wait_for_removal_condvar;
256 const std::shared_ptr<io_service>& get_default_io_service(
void);
263 void set_default_io_service(
const std::shared_ptr<io_service>& service);
void set_nb_workers(std::size_t nb_threads)
std::function< void(fd_t)> event_callback_t
Definition: io_service.hpp:82
void untrack(const tcp_socket &socket)
io_service & operator=(const io_service &)=delete
assignment operator
Definition: tcp_socket.hpp:38
Definition: io_service.hpp:54
void wait_for_removal(const tcp_socket &socket)
Definition: self_pipe.hpp:33
Definition: io_service.hpp:48
void set_wr_callback(const tcp_socket &socket, const event_callback_t &event_callback)
void track(const tcp_socket &socket, const event_callback_t &rd_callback=nullptr, const event_callback_t &wr_callback=nullptr)
Definition: thread_pool.hpp:41
void set_rd_callback(const tcp_socket &socket, const event_callback_t &event_callback)