From 7943b1389181d9047e00ab946350e89107cace50 Mon Sep 17 00:00:00 2001 From: orignal Date: Sun, 22 Nov 2015 17:01:37 -0500 Subject: [PATCH] use shared_ptr for sockets --- HTTPServer.cpp | 22 ++++++++++------------ HTTPServer.h | 13 ++++++------- 2 files changed, 16 insertions(+), 19 deletions(-) diff --git a/HTTPServer.cpp b/HTTPServer.cpp index 07457549..1429c686 100644 --- a/HTTPServer.cpp +++ b/HTTPServer.cpp @@ -1066,10 +1066,8 @@ namespace util HTTPServer::HTTPServer (int port): m_Thread (nullptr), m_Work (m_Service), - m_Acceptor (m_Service, boost::asio::ip::tcp::endpoint (boost::asio::ip::tcp::v4 (), port)), - m_NewSocket (nullptr) + m_Acceptor (m_Service, boost::asio::ip::tcp::endpoint (boost::asio::ip::tcp::v4 (), port)) { - } HTTPServer::~HTTPServer () @@ -1079,7 +1077,7 @@ namespace util void HTTPServer::Start () { - m_Thread = new std::thread (std::bind (&HTTPServer::Run, this)); + m_Thread = std::unique_ptr(new std::thread (std::bind (&HTTPServer::Run, this))); m_Acceptor.listen (); Accept (); } @@ -1091,7 +1089,6 @@ namespace util if (m_Thread) { m_Thread->join (); - delete m_Thread; m_Thread = nullptr; } } @@ -1103,23 +1100,24 @@ namespace util void HTTPServer::Accept () { - m_NewSocket = new boost::asio::ip::tcp::socket (m_Service); - m_Acceptor.async_accept (*m_NewSocket, boost::bind (&HTTPServer::HandleAccept, this, - boost::asio::placeholders::error)); + auto newSocket = std::make_shared (m_Service); + m_Acceptor.async_accept (*newSocket, boost::bind (&HTTPServer::HandleAccept, this, + boost::asio::placeholders::error, newSocket)); } - void HTTPServer::HandleAccept(const boost::system::error_code& ecode) + void HTTPServer::HandleAccept(const boost::system::error_code& ecode, + std::shared_ptr newSocket) { if (!ecode) { - CreateConnection(m_NewSocket); + CreateConnection(newSocket); Accept (); } } - void HTTPServer::CreateConnection(boost::asio::ip::tcp::socket * m_NewSocket) + void HTTPServer::CreateConnection(std::shared_ptr newSocket) { - auto conn = std::make_shared (m_NewSocket); + auto conn = std::make_shared (newSocket); conn->Receive (); } } diff --git a/HTTPServer.h b/HTTPServer.h index e2ca3774..98383644 100644 --- a/HTTPServer.h +++ b/HTTPServer.h @@ -45,10 +45,9 @@ namespace util public: - HTTPConnection (boost::asio::ip::tcp::socket * socket): + HTTPConnection (std::shared_ptr socket): m_Socket (socket), m_Timer (socket->get_io_service ()), m_Stream (nullptr), m_BufferLen (0) {}; - ~HTTPConnection() { delete m_Socket; } void Receive (); private: @@ -80,7 +79,7 @@ namespace util protected: - boost::asio::ip::tcp::socket * m_Socket; + std::shared_ptr m_Socket; boost::asio::deadline_timer m_Timer; std::shared_ptr m_Stream; char m_Buffer[HTTP_CONNECTION_BUFFER_SIZE + 1], m_StreamBuffer[HTTP_CONNECTION_BUFFER_SIZE + 1]; @@ -117,18 +116,18 @@ namespace util void Run (); void Accept (); - void HandleAccept(const boost::system::error_code& ecode); + void HandleAccept(const boost::system::error_code& ecode, + std::shared_ptr newSocket); private: - std::thread * m_Thread; + std::unique_ptr m_Thread; boost::asio::io_service m_Service; boost::asio::io_service::work m_Work; boost::asio::ip::tcp::acceptor m_Acceptor; - boost::asio::ip::tcp::socket * m_NewSocket; protected: - virtual void CreateConnection(boost::asio::ip::tcp::socket * m_NewSocket); + virtual void CreateConnection(std::shared_ptr newSocket); }; } }