无法解锁增强asio接受器

时间:2014-08-05 08:03:40

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

我试图通过程序在该行中保持阻塞来取消TCP接受器。

一个线程等待这样的连接:

boost::system::error_code ec;
acceptor_ = new boost::asio::ip::tcp::acceptor(io_service_, boost::asio::ip::tcp::endpoint(boost::asio::ip::tcp::v4(), port));
acceptor_->accept(socket_, ec);  // socket_ is a boost::asio::ip::tcp:socket

必须关闭接受器的线程:

boost::system::error_code ec;
acceptor_->close(ec);

我有什么遗失的吗?我没有使用任何异步操作,所以我可以用io_service对象做什么吗?

1 个答案:

答案 0 :(得分:1)

简而言之,您无法使用 asio 函数和方法取消大多数异步操作。

问题是基础acceptread等是系统调用。它们不能使用io_service::stopcancel来中断,因为接受线程在syscall中被阻止,而不是asio事件循环。它们只能通过杀死线程或发送信号来中断。

我宁愿让这个接受者异常,所以问题就会消失。另请参阅this Q on SO关于此