可悲的是,由于我无法理解 boost::asio::ip::tcp::acceptor 应该如何使用,因此我的开发停滞不前。TCPReader 类被设计为单例,并且标头将以下内容声明为私有。
void runInThread();
void read_handler(const boost::system::error_code &ec, std::size_t bytes_transferred);
void accept_handler(const boost::system::error_code &ec);
boost::asio::io_service io_service;
boost::asio::io_service::work runningService;
boost::asio::ip::tcp::socket sock;
boost::asio::ip::tcp::acceptor acceptor;
bool isConnected;
<<
TCPReader::TCPReader() : sock(io_service),
runningService(io_service),
acceptor(io_service, boost::asio::ip::tcp::endpoint(boost::asio::ip::tcp::v4(), TCPPort)){
this->isConnected = false;
acceptor.async_accept(sock, boost::bind(&TCPReader::accept_handler, this, boost::asio::placeholders::error));
boost::thread thread(boost::bind(&TCPReader::runInThread, this));
}
void TCPReader::runInThread(){
io_service.run();
}
accept_handler 比触发 read_handler 并且在 read_handler 收到 EOF 或其他错误之前,一切都像魅力一样工作。我想要的是让接受器恢复到可以接受连接的状态,就像它在初始化后所做的那样。我尝试了close()
orcancel()
使用以下open()
, listen()
and async_accept
(就像在构造函数中一样)。但这一切似乎都不起作用。非常感谢您的帮助。