void MessageDirector::init_network() { if(!m_initialized) { // Bind to port and listen for downstream servers if(bind_addr.get_val() != "unspecified") { m_log.info() << "Opening listening socket..." << std::endl; TcpAcceptorCallback callback = std::bind(&MessageDirector::handle_connection, this, std::placeholders::_1); m_net_acceptor = new TcpAcceptor(io_service, callback); boost::system::error_code ec; ec = m_net_acceptor->bind(bind_addr.get_val(), 7199); if(ec.value() != 0) { m_log.fatal() << "Could not bind listening port: " << bind_addr.get_val() << std::endl; m_log.fatal() << "Error code: " << ec.value() << "(" << ec.category().message(ec.value()) << ")" << std::endl; exit(1); } m_net_acceptor->start(); } // Connect to upstream server and start handling received messages if(connect_addr.get_val() != "unspecified") { m_log.info() << "Connecting upstream..." << std::endl; MDNetworkUpstream *upstream = new MDNetworkUpstream(this); boost::system::error_code ec; upstream->connect(connect_addr.get_val()); if(ec.value() != 0) { m_log.fatal() << "Could not connect to remote MD at IP: " << connect_addr.get_val() << std::endl; m_log.fatal() << "Error code: " << ec.value() << "(" << ec.category().message(ec.value()) << ")" << std::endl; exit(1); } m_upstream = upstream; } if(threaded_mode.get_val()) { m_thread = new std::thread(std::bind(&MessageDirector::routing_thread, this)); } m_initialized = true; } }