슬프게도 부스트 :: asio :: ip :: tcp :: acceptor가 얼마나 정확한지 이해할 수 없기 때문에 슬픈 듯이 개발에 착수했다. 익숙한. TCPReader 클래스는 싱글 톤으로 설계되었으며 헤더는 private로 다음을 선언합니다. boost :: asio acceptor가 다시 열리고 EOF 이후에 async가 읽힌다.
< <
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();
}
read_handler가 EOF 또는 다른 오류를 수신 할 때까지 매력처럼 read_handler 및 모든 작품을 트리거보다 accept_handler
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;
. 내가 원했던 것은 acceptor를 초기화 후에 연결을 받아 들일 수있는 상태로 되돌려 놓는 것이다. 나는 또는
cancel()
을 다음과 같이
open()
,
listen()
및
async_accept
(생성자에서와 같이) 시도했습니다. 그러나 모든 것이 효과가없는 것 같습니다. 도움을 많이 주시면 감사하겠습니다.
대단히 감사합니다 :) 내 하루를 구 했어요! :) – dos