diff --git a/src/daemon/command_line_args.h b/src/daemon/command_line_args.h index 32fdca5ea..d089d4e47 100644 --- a/src/daemon/command_line_args.h +++ b/src/daemon/command_line_args.h @@ -122,6 +122,11 @@ namespace daemon_args } }; + const command_line::arg_descriptor arg_zmq_rpc_disabled = { + "no-zmq" + , "Disable ZMQ RPC server" + }; + } // namespace daemon_args #endif // DAEMON_COMMAND_LINE_ARGS_H diff --git a/src/daemon/daemon.cpp b/src/daemon/daemon.cpp index 531c080de..9dca4c4ba 100644 --- a/src/daemon/daemon.cpp +++ b/src/daemon/daemon.cpp @@ -104,6 +104,7 @@ t_daemon::t_daemon( { zmq_rpc_bind_port = command_line::get_arg(vm, daemon_args::arg_zmq_rpc_bind_port); zmq_rpc_bind_address = command_line::get_arg(vm, daemon_args::arg_zmq_rpc_bind_ip); + zmq_rpc_disabled = command_line::get_arg(vm, daemon_args::arg_zmq_rpc_disabled); } t_daemon::~t_daemon() = default; @@ -170,25 +171,30 @@ bool t_daemon::run(bool interactive) cryptonote::rpc::DaemonHandler rpc_daemon_handler(mp_internals->core.get(), mp_internals->p2p.get()); cryptonote::rpc::ZmqServer zmq_server(rpc_daemon_handler); - if (!zmq_server.addTCPSocket(zmq_rpc_bind_address, zmq_rpc_bind_port)) + if (!zmq_rpc_disabled) { - LOG_ERROR(std::string("Failed to add TCP Socket (") + zmq_rpc_bind_address - + ":" + zmq_rpc_bind_port + ") to ZMQ RPC Server"); + if (!zmq_server.addTCPSocket(zmq_rpc_bind_address, zmq_rpc_bind_port)) + { + LOG_ERROR(std::string("Failed to add TCP Socket (") + zmq_rpc_bind_address + + ":" + zmq_rpc_bind_port + ") to ZMQ RPC Server"); - if (rpc_commands) - rpc_commands->stop_handling(); + if (rpc_commands) + rpc_commands->stop_handling(); - for(auto& rpc : mp_internals->rpcs) - rpc->stop(); + for(auto& rpc : mp_internals->rpcs) + rpc->stop(); - return false; + return false; + } + + MINFO("Starting ZMQ server..."); + zmq_server.run(); + + MINFO(std::string("ZMQ server started at ") + zmq_rpc_bind_address + + ":" + zmq_rpc_bind_port + "."); } - - MINFO("Starting ZMQ server..."); - zmq_server.run(); - - MINFO(std::string("ZMQ server started at ") + zmq_rpc_bind_address - + ":" + zmq_rpc_bind_port + "."); + else + MINFO("ZMQ server disabled"); if (public_rpc_port > 0) { @@ -201,7 +207,8 @@ bool t_daemon::run(bool interactive) if (rpc_commands) rpc_commands->stop_handling(); - zmq_server.stop(); + if (!zmq_rpc_disabled) + zmq_server.stop(); for(auto& rpc : mp_internals->rpcs) rpc->stop(); diff --git a/src/daemon/daemon.h b/src/daemon/daemon.h index d44173177..c0efb68ee 100644 --- a/src/daemon/daemon.h +++ b/src/daemon/daemon.h @@ -46,6 +46,7 @@ private: uint16_t public_rpc_port; std::string zmq_rpc_bind_address; std::string zmq_rpc_bind_port; + bool zmq_rpc_disabled; public: t_daemon( boost::program_options::variables_map const & vm, diff --git a/src/daemon/main.cpp b/src/daemon/main.cpp index dbbb2308c..236721f33 100644 --- a/src/daemon/main.cpp +++ b/src/daemon/main.cpp @@ -141,6 +141,7 @@ int main(int argc, char const * argv[]) command_line::add_arg(core_settings, daemon_args::arg_public_node); command_line::add_arg(core_settings, daemon_args::arg_zmq_rpc_bind_ip); command_line::add_arg(core_settings, daemon_args::arg_zmq_rpc_bind_port); + command_line::add_arg(core_settings, daemon_args::arg_zmq_rpc_disabled); daemonizer::init_options(hidden_options, visible_options); daemonize::t_executor::init_options(core_settings);