如何阻止监控服务器形成并行服务?

时间:2015-03-09 17:43:58

标签: c++ boost boost-asio

我添加了一个基于boost server3 example的监控服务器。我有一个正在运行的并行服务。如果并行服务中发生某些异常,我想停止服务器(或更改其输出代码)。这可能吗?

我在main函数中有以下代码:

    boost::asio::io_service io_service;
// ...

    // Register signal handlers so that the daemon may be shut down. You may
    // also want to register for other signals, such as SIGHUP to trigger a
    // re-read of a configuration file.
    boost::asio::signal_set signals(io_service, SIGINT, SIGTERM);
    signals.async_wait(boost::bind(&boost::asio::io_service::stop, &io_service));

    http::server::Server s("localhost", "5000");

    boost::thread t(boost::bind(&http::server::Server::run, &s));
    boost::thread t2(boost::bind(&boost::asio::io_service::run, &io_service));

    // Restore previous signals.
    pthread_sigmask(SIG_SETMASK, &old_mask, 0);

    // Wait for signal indicating time to shut down.
    sigset_t wait_mask;
    sigemptyset(&wait_mask);
    sigaddset(&wait_mask, SIGINT);
    sigaddset(&wait_mask, SIGQUIT);
    sigaddset(&wait_mask, SIGTERM);
    pthread_sigmask(SIG_BLOCK, &wait_mask, 0);
    int sig = 0;
    sigwait(&wait_mask, &sig);

    // Stop the server.
    s.stop();
    io_service.stop();
t.join();
    t2.join();

这是一个try catch块。

在io_service中可能会发生一些异常,如果发生了异常,我想更改服务器的输出。我可以那样做吗?怎么样?

我想到了异常处理:引发某个异常,如果发生,将停止应用程序。这是要走的路,还是有另一种最佳做法?

如果您认为我在主要方面做错了,请纠正我。

0 个答案:

没有答案