gpt4 book ai didi

C++ Boost.Asio 对象生命周期

转载 作者:行者123 更新时间:2023-11-30 01:55:08 25 4
gpt4 key购买 nike

asio::io_service ioService;
asio::ip::tcp::socket* socket = new asio::ip::tcp::socket(ioService);
socket->async_connect(endpoint, handler);
delete socket;

Socket 的析构函数应该关闭套接字。但是异步后端可以处理这个吗?它会取消异步操作并调用处理程序吗?可能不是?

最佳答案

当套接字被销毁时,它invokes destroy在其服务上。当 SocketService 的 destroy()调用函数时,它通过调用非抛出的 close() 取消异步操作。取消操作的处理程序将在 io_service 中发布以供调用,并出现 boost::asio::error::operation_aborted 错误。


这是一个完整的示例,展示了记录的行为:

#include <iostream>
#include <boost/asio.hpp>

void handle_connect(const boost::system::error_code& error)
{
std::cout << "handle_connect: " << error.message() << std::endl;
}

int main()
{
namespace ip = boost::asio::ip;
using ip::tcp;

boost::asio::io_service io_service;
// Create socket with a scoped life.
{
tcp::socket socket(io_service);
socket.async_connect(
tcp::endpoint(ip::address::from_string("1.2.3.4"), 12345),
&handle_connect);
}
io_service.run();
}

及其输出:

handle_connect: Operation canceled

关于C++ Boost.Asio 对象生命周期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20963731/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com