Fix EAGAIN bug in ZMQ-RPC/ZMQ-PUB
This commit is contained in:
parent
d9b765a3af
commit
fe746dca4e
|
@ -158,13 +158,22 @@ void ZmqServer::serve()
|
||||||
|
|
||||||
if (!pub || sockets[2].revents)
|
if (!pub || sockets[2].revents)
|
||||||
{
|
{
|
||||||
std::string message = MONERO_UNWRAP(net::zmq::receive(rep.get(), read_flags));
|
expect<std::string> message = net::zmq::receive(rep.get(), read_flags);
|
||||||
MDEBUG("Received RPC request: \"" << message << "\"");
|
if (!message)
|
||||||
epee::byte_slice response = handler.handle(std::move(message));
|
{
|
||||||
|
// EAGAIN can occur when using `zmq_poll`, which doesn't inspect for message validity
|
||||||
|
if (message != net::zmq::make_error_code(EAGAIN))
|
||||||
|
MONERO_THROW(message.error(), "Read failure on ZMQ-RPC");
|
||||||
|
}
|
||||||
|
else // no errors
|
||||||
|
{
|
||||||
|
MDEBUG("Received RPC request: \"" << *message << "\"");
|
||||||
|
epee::byte_slice response = handler.handle(std::move(*message));
|
||||||
|
|
||||||
const boost::string_ref response_view{reinterpret_cast<const char*>(response.data()), response.size()};
|
const boost::string_ref response_view{reinterpret_cast<const char*>(response.data()), response.size()};
|
||||||
MDEBUG("Sending RPC reply: \"" << response_view << "\"");
|
MDEBUG("Sending RPC reply: \"" << response_view << "\"");
|
||||||
MONERO_UNWRAP(net::zmq::send(std::move(response), rep.get()));
|
MONERO_UNWRAP(net::zmq::send(std::move(response), rep.get()));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue