void servant(connection_type c) { if (read_timeout_>std::chrono::seconds(0) || write_timeout_>std::chrono::seconds(0)) { c.start_watchdog(); } request req; int count=0; while(c.recv(req)) { response resp; // Set default attributes for response resp.status_code=http_status_code::OK; resp.version=req.version; resp.keep_alive=req.keep_alive; if(count>=max_keep_alive_) resp.keep_alive=false; if(!default_request_handler_(req, resp, c.stream())) { break; } c.send(resp); // Make sure we consumed all parts of the request req.drop_body(); // Make sure all data are received and sent c.stream().flush(); // Keepalive counter count++; } c.close(); active_connection_--; connection_close_.notify_one(); }
boost::system::error_code accept(connection_type &sc) { boost::system::error_code ec; acceptor_(sc.stream(), ec); if (!ec) { active_connection_++; } return ec; }