socket_poller.hpp
Go to the documentation of this file.
1 /* SPDX-License-Identifier: MPL-2.0 */
2 
3 #ifndef __ZMQ_SOCKET_POLLER_HPP_INCLUDED__
4 #define __ZMQ_SOCKET_POLLER_HPP_INCLUDED__
5 
6 #include "poller.hpp"
7 
8 #if defined ZMQ_POLL_BASED_ON_POLL && !defined ZMQ_HAVE_WINDOWS
9 #include <poll.h>
10 #endif
11 
12 #if defined ZMQ_HAVE_WINDOWS
13 #include "windows.hpp"
14 #elif defined ZMQ_HAVE_VXWORKS
15 #include <unistd.h>
16 #include <sys/time.h>
17 #include <strings.h>
18 #else
19 #include <unistd.h>
20 #endif
21 
22 #include <vector>
23 
24 #include "socket_base.hpp"
25 #include "signaler.hpp"
26 #include "polling_util.hpp"
27 
28 namespace zmq
29 {
31 {
32  public:
33  socket_poller_t ();
35 
37 
38  int add (socket_base_t *socket_, void *user_data_, short events_);
39  int modify (const socket_base_t *socket_, short events_);
40  int remove (socket_base_t *socket_);
41 
42  int add_fd (fd_t fd_, void *user_data_, short events_);
43  int modify_fd (fd_t fd_, short events_);
44  int remove_fd (fd_t fd_);
45  // Returns the signaler's fd if there is one, otherwise errors.
46  int signaler_fd (fd_t *fd_) const;
47 
48  int wait (event_t *events_, int n_events_, long timeout_);
49 
50  int size () const { return static_cast<int> (_items.size ()); };
51 
52  // Return false if object is not a socket.
53  bool check_tag () const;
54 
55  private:
56  typedef struct item_t
57  {
60  void *user_data;
61  short events;
62 #if defined ZMQ_POLL_BASED_ON_POLL
63  int pollfd_index;
64 #endif
65  } item_t;
66 
68  int n_events_,
69  int found_);
70 #if defined ZMQ_POLL_BASED_ON_POLL
71  int check_events (zmq::socket_poller_t::event_t *events_, int n_events_);
72 #elif defined ZMQ_POLL_BASED_ON_SELECT
74  int n_events_,
75  fd_set &inset_,
76  fd_set &outset_,
77  fd_set &errset_);
78 #endif
79  static int adjust_timeout (zmq::clock_t &clock_,
80  long timeout_,
81  uint64_t &now_,
82  uint64_t &end_,
83  bool &first_pass_);
84  static bool is_socket (const item_t &item, const socket_base_t *socket_)
85  {
86  return item.socket == socket_;
87  }
88  static bool is_fd (const item_t &item, fd_t fd_)
89  {
90  return !item.socket && item.fd == fd_;
91  }
92 
93  int rebuild ();
94 
95  // Used to check whether the object is a socket_poller.
96  uint32_t _tag;
97 
98  // Signaler used for thread safe sockets polling
100 
101  // List of sockets
102  typedef std::vector<item_t> items_t;
104 
105  // Does the pollset needs rebuilding?
107 
108  // Should the signaler be used for the thread safe polling?
110 
111  // Size of the pollset
113 
114 #if defined ZMQ_POLL_BASED_ON_POLL
115  pollfd *_pollfds;
116 #elif defined ZMQ_POLL_BASED_ON_SELECT
117  resizable_optimized_fd_set_t _pollset_in;
118  resizable_optimized_fd_set_t _pollset_out;
119  resizable_optimized_fd_set_t _pollset_err;
120  zmq::fd_t _max_fd;
121 #endif
122 
124 };
125 }
126 
127 #endif
zmq::socket_poller_t::item_t::events
short events
Definition: socket_poller.hpp:61
zmq::socket_poller_t::socket_poller_t
socket_poller_t()
Definition: socket_poller.cpp:29
zmq::socket_poller_t
Definition: socket_poller.hpp:30
item
cJSON * item
Definition: cJSON.h:236
zmq::socket_poller_t::item_t::socket
socket_base_t * socket
Definition: socket_poller.hpp:58
zmq::socket_poller_t::size
int size() const
Definition: socket_poller.hpp:50
zmq::socket_poller_t::signaler_fd
int signaler_fd(fd_t *fd_) const
Definition: socket_poller.cpp:74
zmq::socket_poller_t::add
int add(socket_base_t *socket_, void *user_data_, short events_)
Definition: socket_poller.cpp:85
polling_util.hpp
zmq::socket_poller_t::add_fd
int add_fd(fd_t fd_, void *user_data_, short events_)
Definition: socket_poller.cpp:135
zmq::socket_base_t
Definition: socket_base.hpp:31
zmq::socket_poller_t::_pollset_size
int _pollset_size
Definition: socket_poller.hpp:112
zmq::fd_t
int fd_t
Definition: zmq.hpp:287
zmq::socket_poller_t::_items
items_t _items
Definition: socket_poller.hpp:103
zmq::socket_poller_t::_use_signaler
bool _use_signaler
Definition: socket_poller.hpp:109
zmq::socket_poller_t::modify
int modify(const socket_base_t *socket_, short events_)
Definition: socket_poller.cpp:165
zmq
Definition: zmq.hpp:229
zmq::socket_poller_t::is_fd
static bool is_fd(const item_t &item, fd_t fd_)
Definition: socket_poller.hpp:88
zmq::socket_poller_t::~socket_poller_t
~socket_poller_t()
Definition: socket_poller.cpp:43
zmq::socket_poller_t::zero_trail_events
static void zero_trail_events(zmq::socket_poller_t::event_t *events_, int n_events_, int found_)
Definition: socket_poller.cpp:374
zmq::socket_poller_t::wait
int wait(event_t *events_, int n_events_, long timeout_)
Definition: socket_poller.cpp:497
zmq::socket_poller_t::adjust_timeout
static int adjust_timeout(zmq::clock_t &clock_, long timeout_, uint64_t &now_, uint64_t &end_, bool &first_pass_)
Definition: socket_poller.cpp:460
windows.hpp
zmq::socket_poller_t::item_t
struct zmq::socket_poller_t::item_t item_t
poller.hpp
zmq_poller_event_t
Definition: zmq_draft.h:114
ZMQ_NON_COPYABLE_NOR_MOVABLE
#define ZMQ_NON_COPYABLE_NOR_MOVABLE(classname)
Definition: macros.hpp:58
zmq::socket_poller_t::item_t::user_data
void * user_data
Definition: socket_poller.hpp:60
zmq::socket_poller_t::event_t
zmq_poller_event_t event_t
Definition: socket_poller.hpp:36
zmq::socket_poller_t::is_socket
static bool is_socket(const item_t &item, const socket_base_t *socket_)
Definition: socket_poller.hpp:84
zmq::socket_poller_t::modify_fd
int modify_fd(fd_t fd_, short events_)
Definition: socket_poller.cpp:182
zmq::signaler_t
Definition: signaler.hpp:20
zmq::socket_poller_t::items_t
std::vector< item_t > items_t
Definition: socket_poller.hpp:102
zmq::socket_poller_t::check_tag
bool check_tag() const
Definition: socket_poller.cpp:69
socket_base.hpp
zmq::clock_t
Definition: clock.hpp:27
zmq::socket_poller_t::_signaler
signaler_t * _signaler
Definition: socket_poller.hpp:99
signaler.hpp
zmq::socket_poller_t::remove_fd
int remove_fd(fd_t fd_)
Definition: socket_poller.cpp:219
zmq::socket_poller_t::item_t::fd
fd_t fd
Definition: socket_poller.hpp:59
zmq::socket_poller_t::_tag
uint32_t _tag
Definition: socket_poller.hpp:96
check_events
static int check_events(const short events_)
Definition: zmq.cpp:1465
zmq::socket_poller_t::remove
int remove(socket_base_t *socket_)
Definition: socket_poller.cpp:199
zmq::socket_poller_t::rebuild
int rebuild()
Definition: socket_poller.cpp:235
zmq::socket_poller_t::item_t
Definition: socket_poller.hpp:56
zmq::socket_poller_t::_need_rebuild
bool _need_rebuild
Definition: socket_poller.hpp:106


libaditof
Author(s):
autogenerated on Wed May 21 2025 02:06:58