如何单独捕获boost asio中boost::system::error_code连接异常?

6
Boost asio有这样的套接字连接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。如何做到这一点?
1个回答

12
catch( const boost::system::system_error& ex )
{
  return -1;
}

请使用常量引用进行捕获。


你能详细说明一下吗?为什么要使用常量引用? - Jon
Ref是因为你不想复制它。Const是因为你不想改变它。 - John Dibling
3
我知道这很老,但实际上抛出的异常是boost::system::system_error,而不是error_code本身。 - Peter Remmers
记录一下,这并不总是有效的。我认为这个回应实际上并没有解决问题。对我来说,当关闭套接字时会发生异常。据我所知,这个异常是无法捕获的,你的程序将会崩溃...唯一的解决方法就是保持套接字处于打开状态。 - Michael

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接