⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 connection.cpp

📁 Boost provides free peer-reviewed portable C++ source libraries. We emphasize libraries that work
💻 CPP
字号:
//// connection.cpp// ~~~~~~~~~~~~~~//// Copyright (c) 2003-2008 Christopher M. Kohlhoff (chris at kohlhoff dot com)//// Distributed under the Boost Software License, Version 1.0. (See accompanying// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)//#include "connection.hpp"#include <vector>#include <boost/bind.hpp>#include "request_handler.hpp"namespace http {namespace server3 {connection::connection(boost::asio::io_service& io_service,    request_handler& handler)  : strand_(io_service),    socket_(io_service),    request_handler_(handler){}boost::asio::ip::tcp::socket& connection::socket(){  return socket_;}void connection::start(){  socket_.async_read_some(boost::asio::buffer(buffer_),      strand_.wrap(        boost::bind(&connection::handle_read, shared_from_this(),          boost::asio::placeholders::error,          boost::asio::placeholders::bytes_transferred)));}void connection::handle_read(const boost::system::error_code& e,    std::size_t bytes_transferred){  if (!e)  {    boost::tribool result;    boost::tie(result, boost::tuples::ignore) = request_parser_.parse(        request_, buffer_.data(), buffer_.data() + bytes_transferred);    if (result)    {      request_handler_.handle_request(request_, reply_);      boost::asio::async_write(socket_, reply_.to_buffers(),          strand_.wrap(            boost::bind(&connection::handle_write, shared_from_this(),              boost::asio::placeholders::error)));    }    else if (!result)    {      reply_ = reply::stock_reply(reply::bad_request);      boost::asio::async_write(socket_, reply_.to_buffers(),          strand_.wrap(            boost::bind(&connection::handle_write, shared_from_this(),              boost::asio::placeholders::error)));    }    else    {      socket_.async_read_some(boost::asio::buffer(buffer_),          strand_.wrap(            boost::bind(&connection::handle_read, shared_from_this(),              boost::asio::placeholders::error,              boost::asio::placeholders::bytes_transferred)));    }  }  // If an error occurs then no new asynchronous operations are started. This  // means that all shared_ptr references to the connection object will  // disappear and the object will be destroyed automatically after this  // handler returns. The connection class's destructor closes the socket.}void connection::handle_write(const boost::system::error_code& e){  if (!e)  {    // Initiate graceful connection closure.    boost::system::error_code ignored_ec;    socket_.shutdown(boost::asio::ip::tcp::socket::shutdown_both, ignored_ec);  }  // No new asynchronous operations are started. This means that all shared_ptr  // references to the connection object will disappear and the object will be  // destroyed automatically after this handler returns. The connection class's  // destructor closes the socket.}} // namespace server3} // namespace http

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -