44 virtual const char*
name()
const noexcept
override final 46 return "error::error_category()";
51 char const*
const msg = zmq_strerror(
value);
54 return "zmq_strerror failure";
57 virtual std::error_condition default_error_condition(
int value)
const noexcept
override final 71 return std::errc(
value);
73 return std::error_condition{
value, *
this};
77 static const category instance{};
81 void terminate::call(
void* ptr) noexcept
83 assert(ptr !=
nullptr);
86 if (zmq_errno() != EINTR)
102 zmq_msg_init(handle());
112 zmq_msg_close(handle());
115 zmq_msg_t* handle() noexcept
117 return std::addressof(handle_);
120 const char* data() noexcept
122 return static_cast<const char*
>(zmq_msg_data(handle()));
125 std::size_t size() noexcept
127 return zmq_msg_size(handle());
142 static constexpr
const int max_out = std::numeric_limits<int>::max();
143 const std::string::size_type initial = payload.size();
148 if ((last = zmq_msg_recv(part.handle(),
socket, flags)) < 0)
151 payload.append(part.data(), part.size());
152 if (!zmq_msg_more(part.handle()))
155 const std::string::size_type added = payload.size() - initial;
156 return unsigned(max_out) < added ? max_out : int(added);
160 template<
typename F,
typename...
T>
161 expect<void> retry_op(
F op,
T&&... args) noexcept(noexcept(op(args...)))
165 if (0 <= op(args...))
168 const int error = zmq_errno();
184 return retry_op(zmq_send,
socket, payload.data(), payload.size(), flags);
std::error_code make_error_code(int code) noexcept
expect< std::string > receive(void *const socket, const int flags)
const std::error_category & error_category() noexcept
std::unique_ptr< void, close > socket
Unique ZMQ socket handle, calls zmq_close on destruction.
#define ELECTRONEUM_CHECK(...)
Check expect<void> and return errors in current scope.
std::string message("Message requiring signing")
expect< void > success() noexcept
const T & move(const T &t)
const GenericPointer< typename T::ValueType > T2 value
connection< TProtocol > & operator=(const connection< TProtocol > &obj)
expect< void > send(const epee::span< const std::uint8_t > payload, void *const socket, const int flags) noexcept