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;
    }
}