如何避免Boost Asio和C/C++拒绝连接后程序退出
How to avoid the program exit after Connection Refused with Boost Asio and C/C++
目前,我正在使用Boost Asio通过TCP连接到服务器。
我使用有条件的情况来决定应用程序是否必须启动与服务器的连接;它工作得很好,但问题是,如果我试图在服务器关闭时连接到服务器,那么应用程序就会崩溃,出现以下错误:
terminate called after throwing an instance of 'boost::exception_detail::clone_impl<boost::exception_detail::error_info_injector<boost::system::system_error> >'
what(): Connection refused
这是我正在使用的代码:
case CONNECTION:
// Connect to the server
using boost::asio::ip::tcp;
boost::asio::io_service io_service;
tcp::resolver resolver(io_service);
tcp::resolver::query query(tcp::v4(), server, boost::lexical_cast<string>(porta));
tcp::resolver::iterator iterator = resolver.resolve(query);
tcp::socket s(io_service);
s.connect(*iterator);
我想让我的应用程序保持正常行为,只提示连接失败的警告。
如何处理此异常?
您应该使用try ... catch
块。他们是这样工作的:
try
{
s.connect(*iterator);
}
catch (boost::system::system_error const& e)
{
std::cout << "Warning: could not connect : " << e.what() << std::endl;
}
根据此处的文档,失败时connect
会抛出boost::system::system_error
。因此,您需要将代码封装在try...catch
块中,并捕获上面提到的异常。或者,如果你不想使用异常,你可以使用这里描述的另一个重载,它在出错时返回错误代码。
相关文章:
- 当套接字连接断开时检测C/C++Unix
- 访问被拒绝后,c++中的故障保护代码
- WinSock2:connect() 提供"连接被拒绝"
- 为什么mysql拒绝本地连接
- 尝试连接到 TCP 套接字 (Linux) 时连接被拒绝
- 连接() 在连接被拒绝时长时间挂起
- 在环路中使用 UDP 套接字时连接被拒绝
- 如何在两个设备之间与TCP通信时修复错误"连接被拒绝"
- 使用静态IP地址时,ESP32 httpclient连接拒绝了
- MySQL-connector-C++ 8.0 连接被拒绝
- 连接拒绝从C 驱动程序到MySQL数据库
- MySQL / C ++连接器错误:使用旧的(4.1.1之前)身份验证协议的连接被拒绝
- 在Recv()上拒绝连接,而发送似乎工作正常
- 正在连接IPv4客户端到IPv6服务器:连接拒绝
- c++ winsock连接IPv4地址时被拒绝
- Python客户端- c++服务器连接被拒绝错误
- 提升 ASIO:某些网址上的连接被拒绝
- 如何避免Boost Asio和C/C++拒绝连接后程序退出
- Qt MySQL 适配器拒绝随机连接:无法分配 MYSQL
- FTP被动模式连接拒绝