我有两个对象A和B。A在下面使用B,这是一个tcp客户端对象。对象B是在对象A的构造函数中的单独线程中创建的。在B的构造函数中,我将Boost Asio用于套接字和截止时间计时器。我使用异步调用进行套接字连接并等待计时器。这是对象B的构造函数的代码:
B::B(const boost::asio::ip::address& ipaddr,
std::uint16_t port) : io_service_(),
socket_(io_service_),
endpoint_(ipaddr, port),
connected_(false) {
boost::asio::deadline_timer dt(io_service_);
socket_.async_connect(endpoint_, [this, &dt](const boost::system::error_code& ec) {
if (ec) {
std::cout << ec.message() << std::endl;
}
else {
dt.cancel();
std::cout << "Connected before timer expired" << std::endl;
connected_ = true;
socket_.set_option(boost::asio::socket_base::keep_alive(true));
}
});
dt.expires_from_now(boost::posix_time::seconds(3));
dt.async_wait([this](const boost::system::error_code& ec) {
if (ec) {
std::cout << ec.message() << std::endl;
}
else {
std::cout << "Timer expired before connection" << std::endl;
io_service_.stop();
}
});
io_service_.run();
}
当tcp客户端要连接的计算机处于ON状态时,它可以工作。当机器处于关闭状态时,预期截止期限计时器将在3秒后到期,并且不会设置连接标志。我在执行过程中收到中止调用。我确定这与截止时间计时器有关,但无法确切确定具体内容。
有人看到这里有什么问题或有其他建议吗? Boost Deadline Timer我缺少什么吗?