c++ - The server does not accept clients after several reboots -


i'm writing small server, can parse xml files , send pieces of information clients (os windows server 2008 r2).

server

for passing io_service parameter methods, use boost::shared_ptr:

typedef boost::shared_ptr<io_service> service_ptr; ... _service_ptr = boost::make_shared<io_service>(); 

clients accepting thread:

void accept_thread(serverconfig const& config) {     try {         while(!_data_.isvalid()) {             std::cout << "wait complete data..." << std::endl;             boost::this_thread::sleep( millisec(500));         }          while (true) {             _pool.waitnewclient(_service_ptr);         }     } catch(std::exception& e) {         log::write(log_err, std::string("in accept thread: ") + e.what());         std::cerr << "in accept thread: " << e.what() << std::endl;     } } 

accepting next client:

void cclientpool::waitnewclient(service_ptr& serv_ptr) {     client_ptr new_( new talk_to_client(serv_ptr));     _acceptor.accept(new_);      boost::lock_guard<boost::mutex> lk(*_mutex);// safe lock clients     new_->reset_last_ping();     clients.push_back(new_);     log::write(log_inf, "connected new client.");     std::cout << "connected new client." << std::endl; } 

and:

void cclientacceptor::init(int port, service_ptr& serv_ptr) {     acceptor_ptr_ = boost::make_shared<ip::tcp::acceptor>(*serv_ptr, ip::tcp::endpoint(ip::tcp::v4(), port) );  }  void cclientacceptor::accept(client_ptr& cl_ptr) {     acceptor_ptr_->accept( cl_ptr->sock()); } 

,where acceptor_ptr_:

typedef boost::shared_ptr<ip::tcp::acceptor> acceptor_ptr; ... acceptor_ptr acceptor_ptr_; 

client

void connect(std::string const& host, int port, boost::shared_ptr<boost::asio::io_service>& service) {      if(connected_){         disconnect();     }     sock_.reset(new ip::tcp::socket(*service));     boost::system::error_code ec;      ep = boost::asio::ip::tcp::endpoint(ip::address::from_string(host), port);      // while not connection     int attempt = 0;     {         if(attempt++ > 0) {             std::cerr << "attempt reconnect #" << attempt << "..." << std::endl;         }          sock_->connect(ep, ec);         if(ec){             std::cerr << "failed connection server: " << ec.message() << std::endl;             boost::this_thread::sleep(boost::posix_time::millisec(1000));         }     } while(ec);      connected_ = true;  }  void disconnect() {     if(sock_) {         boost::system::error_code errorcode;          if(sock_->is_open()) {             sock_->shutdown(boost::asio::ip::tcp::socket::shutdown_both, errorcode);             if (errorcode) {                 std::cerr << "socket.shutdown error: " << errorcode.message() << std::endl;             }              sock_->close(errorcode);             if (errorcode) {                 std::cerr << "socket.close error: " << errorcode.message() << std::endl;             }         }         sock_.reset();     }      connected_ = false; } 

when debug program (starting , stopping server/clients), there point when server stops accepting clients. while connecting client runs without errors, server not accept client anymore. after changing port problem disappears. problem?


Comments