10 #include <framework/pcore/zmq/utils/ZMQParent.h>
16 ZMQParent::~ZMQParent()
21 void ZMQParent::terminate()
29 void ZMQParent::reset()
34 std::string ZMQParent::createIdentity(
unsigned int pid)
36 char hostname[HOST_NAME_MAX];
37 gethostname(hostname, HOST_NAME_MAX);
43 return std::string(hostname) +
"_" + std::to_string(pid);
46 void ZMQParent::initialize()
51 m_context = std::make_unique<zmq::context_t>(1);
54 #if defined(__GNUC__) && !defined(__clang__)
55 #pragma GCC diagnostic push
56 #pragma GCC diagnostic ignored "-Wstack-usage="
58 unsigned int ZMQParent::poll(
const std::vector<zmq::socket_t*>& socketList,
int timeout)
60 B2ASSERT(
"Only allow to poll on maximal 8 sockets at the same time!", socketList.size() <= 8);
61 std::bitset<8> return_bitmask;
62 zmq::pollitem_t items[socketList.size()];
64 for (
unsigned int i = 0; i < socketList.size(); i++) {
65 items[i].socket =
static_cast<void*
>(*socketList[i]);
66 items[i].events = ZMQ_POLLIN;
71 zmq::poll(items, socketList.size(), timeout);
73 for (
unsigned int i = 0; i < socketList.size(); i++) {
74 return_bitmask[i] =
static_cast<bool>(items[i].revents & ZMQ_POLLIN);
76 return return_bitmask.to_ulong();
77 }
catch (zmq::error_t& error) {
78 if (error.num() == EINTR) {
86 #if defined(__GNUC__) && !defined(__clang__)
87 #pragma GCC diagnostic pop