aboutsummaryrefslogtreecommitdiff
path: root/contrib/epee/include/net/connection_basic.hpp
diff options
context:
space:
mode:
Diffstat (limited to 'contrib/epee/include/net/connection_basic.hpp')
-rw-r--r--contrib/epee/include/net/connection_basic.hpp17
1 files changed, 15 insertions, 2 deletions
diff --git a/contrib/epee/include/net/connection_basic.hpp b/contrib/epee/include/net/connection_basic.hpp
index 9b6fc14a7..b1b271db9 100644
--- a/contrib/epee/include/net/connection_basic.hpp
+++ b/contrib/epee/include/net/connection_basic.hpp
@@ -55,6 +55,15 @@ namespace epee
{
namespace net_utils
{
+ struct socket_stats
+ {
+ socket_stats()
+ : sock_count(0), sock_number(0)
+ {}
+
+ std::atomic<long> sock_count;
+ std::atomic<long> sock_number;
+ };
/************************************************************************/
/* */
@@ -72,6 +81,8 @@ class connection_basic_pimpl; // PIMPL for this class
std::string to_string(t_connection_type type);
class connection_basic { // not-templated base class for rapid developmet of some code parts
+ // beware of removing const, net_utils::connection is sketchily doing a cast to prevent storing ptr twice
+ const boost::shared_ptr<socket_stats> m_stats;
public:
std::unique_ptr< connection_basic_pimpl > mI; // my Implementation
@@ -86,13 +97,15 @@ class connection_basic { // not-templated base class for rapid developmet of som
/// Socket for the connection.
boost::asio::ip::tcp::socket socket_;
- std::atomic<long> &m_ref_sock_count; // reference to external counter of existing sockets that we will ++/--
public:
// first counter is the ++/-- count of current sockets, the other socket_number is only-increasing ++ number generator
- connection_basic(boost::asio::io_service& io_service, std::atomic<long> &ref_sock_count, std::atomic<long> &sock_number);
+ connection_basic(boost::asio::ip::tcp::socket&& socket, boost::shared_ptr<socket_stats> stats);
virtual ~connection_basic() noexcept(false);
+ //! \return `socket_stats` object passed in construction (ptr never changes).
+ socket_stats& get_stats() noexcept { return *m_stats; /* verified in constructor */ }
+
// various handlers to be called from connection class:
void do_send_handler_write(const void * ptr , size_t cb);
void do_send_handler_write_from_queue(const boost::system::error_code& e, size_t cb , int q_len); // from handle_write, sending next part