From e8cc104344a236d2f5987e9735216eb7a70de984 Mon Sep 17 00:00:00 2001 From: Giulio Eulisse <10544+ktf@users.noreply.github.com> Date: Tue, 14 Jul 2020 21:53:50 +0200 Subject: [PATCH] Add API to extract ZMQ_EVENTS from socket backend --- fairmq/FairMQSocket.h | 1 + fairmq/shmem/Socket.h | 15 +++++++++++++++ fairmq/zeromq/Socket.h | 15 +++++++++++++++ 3 files changed, 31 insertions(+) diff --git a/fairmq/FairMQSocket.h b/fairmq/FairMQSocket.h index 847c4b6f..4f024099 100644 --- a/fairmq/FairMQSocket.h +++ b/fairmq/FairMQSocket.h @@ -38,6 +38,7 @@ class FairMQSocket virtual void SetOption(const std::string& option, const void* value, size_t valueSize) = 0; virtual void GetOption(const std::string& option, void* value, size_t* valueSize) = 0; + virtual void Events(uint32_t* events) = 0; virtual void SetLinger(const int value) = 0; virtual int GetLinger() const = 0; virtual void SetSndBufSize(const int value) = 0; diff --git a/fairmq/shmem/Socket.h b/fairmq/shmem/Socket.h index df48a990..575968f3 100644 --- a/fairmq/shmem/Socket.h +++ b/fairmq/shmem/Socket.h @@ -375,6 +375,15 @@ class Socket final : public fair::mq::Socket } } + void Events(uint32_t* events) override + { + size_t eventsSize = sizeof(uint32_t); + if (zmq_getsockopt(fSocket, ZMQ_EVENTS, events, &eventsSize) < 0) { + throw SocketError( + tools::ToString("failed setting ZMQ_EVENTS, reason: ", zmq_strerror(errno))); + } + } + int GetLinger() const override { int value = 0; @@ -485,6 +494,12 @@ class Socket final : public fair::mq::Socket if (constant == "snd-more no-block") return ZMQ_DONTWAIT|ZMQ_SNDMORE; if (constant == "fd") return ZMQ_FD; + if (constant == "events") + return ZMQ_EVENTS; + if (constant == "pollin") + return ZMQ_POLLIN; + if (constant == "pollout") + return ZMQ_POLLOUT; return -1; } diff --git a/fairmq/zeromq/Socket.h b/fairmq/zeromq/Socket.h index 453a1479..ab4d9d60 100644 --- a/fairmq/zeromq/Socket.h +++ b/fairmq/zeromq/Socket.h @@ -318,6 +318,15 @@ class Socket final : public fair::mq::Socket } } + void Events(uint32_t* events) override + { + size_t eventsSize = sizeof(uint32_t); + if (zmq_getsockopt(fSocket, ZMQ_EVENTS, events, &eventsSize) < 0) { + throw SocketError( + tools::ToString("failed setting ZMQ_EVENTS, reason: ", zmq_strerror(errno))); + } + } + void SetLinger(const int value) override { if (zmq_setsockopt(fSocket, ZMQ_LINGER, &value, sizeof(value)) < 0) { @@ -433,6 +442,12 @@ class Socket final : public fair::mq::Socket if (constant == "linger") return ZMQ_LINGER; if (constant == "fd") return ZMQ_FD; + if (constant == "events") + return ZMQ_EVENTS; + if (constant == "pollin") + return ZMQ_POLLIN; + if (constant == "pollout") + return ZMQ_POLLOUT; return -1; }