10 #include <framework/pcore/zmq/connections/ZMQConnection.h>
25 const auto emptyFunction = []() {};
29 bool ZMQConnection::poll(
const std::map<const ZMQConnection*, ZMQConnection::ReactorFunction>& connectionList,
int timeout)
31 std::vector<const ReactorFunction*> socketMapping;
32 std::vector<zmq::pollitem_t> pollItems;
35 for (
const auto& [connection,
function] : connectionList) {
36 auto sockets = connection->getSockets();
37 for (zmq::socket_t* socket : sockets) {
38 zmq::pollitem_t pollItem;
39 pollItem.socket =
static_cast<void*
>(*socket);
40 pollItem.events = ZMQ_POLLIN;
42 pollItems.push_back(std::move(pollItem));
45 socketMapping.push_back(&
function);
49 if (pollItems.empty()) {
54 zmq::poll(&pollItems[0], pollItems.size(), timeout);
56 bool anySocket =
false;
57 unsigned int counter = 0;
58 for (
const auto& pollItem : pollItems) {
59 if (pollItem.revents & ZMQ_POLLIN) {
61 const auto* functionPtr = socketMapping.at(counter);
62 const auto function = *functionPtr;
69 }
catch (zmq::error_t& error) {
70 if (error.num() == EINTR) {