【发布时间】:2013-04-10 12:38:19
【问题描述】:
遗憾的是,由于我无法理解 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() 或cancel() 以及以下open()、listen() 和async_accept(就像在构造函数中一样)。但这一切似乎都不起作用。
非常感谢您的帮助。
【问题讨论】:
标签: c++ sockets boost c++11 boost-asio