【问题标题】:How to catch boost asio boost::system::error_code connect exception separatly from other exceptions?如何捕获 boost asio boost::system::error_code 连接异常与其他异常分开?
【发布时间】:2010-11-19 22:29:55
【问题描述】:

Boost asio 有这样的socket connect api。我有这么简单的代码:

try
{
    std::string addr;
    std::string port;
    sscanf(tcpUrl.c_str(), "tcp://%[^:]:%d", &addr, &port);

    boost::asio::io_service io_service;

    tcp::resolver resolver(io_service);
    tcp::resolver::query query(tcp::v4(), addr.c_str(), port.c_str());
    tcp::resolver::iterator iterator = resolver.resolve(query);

    tcp::socket s(io_service);
    s.connect(*iterator);
    Sleep(250);
    s.close();
}
catch (std::exception& e)
{
    return -1;
}

我想要的只是尝试连接并捕获 boost::system::error_code 连接异常。只有它。我不再需要缓存了。在它上面我需要返回-1。这种事情怎么办?

【问题讨论】:

    标签: c++ sockets boost boost-asio execution


    【解决方案1】:
    catch( const boost::system::system_error& ex )
    {
      return -1;
    }
    

    请通过 const 引用捕捉。

    【讨论】:

    • 您能详细说明一下吗?为什么是 const ref?
    • 引用因为您不想复制。 const 因为你不想改变它。
    • 我知道这是旧的,但抛出的异常实际上是 boost::system::system_error,而不是 error_code 本身。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-03-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-03
    相关资源
    最近更新 更多