From a85286c5c718f3cbbce322da8decd7f80e09e25b Mon Sep 17 00:00:00 2001 From: Matthew Zipkin Date: Wed, 4 Jun 2025 14:19:16 -0400 Subject: [PATCH] HTTPServer: generate sequential Ids for each newly accepted connection Co-authored-by: Vasil Dimov --- src/httpserver.cpp | 5 +++++ src/httpserver.h | 16 ++++++++++++++++ 2 files changed, 21 insertions(+) diff --git a/src/httpserver.cpp b/src/httpserver.cpp index 0bda2843fe9..0b846523711 100644 --- a/src/httpserver.cpp +++ b/src/httpserver.cpp @@ -1008,4 +1008,9 @@ std::unique_ptr HTTPServer::AcceptConnection(const Sock& listen_sock, CSer return sock; } + +HTTPServer::Id HTTPServer::GetNewId() +{ + return m_next_id.fetch_add(1, std::memory_order_relaxed); +} } // namespace http_bitcoin diff --git a/src/httpserver.h b/src/httpserver.h index e4dabc632e2..20b9731cc03 100644 --- a/src/httpserver.h +++ b/src/httpserver.h @@ -5,6 +5,7 @@ #ifndef BITCOIN_HTTPSERVER_H #define BITCOIN_HTTPSERVER_H +#include #include #include #include @@ -306,6 +307,11 @@ public: class HTTPServer { public: + /** + * Each connection is assigned an unique id of this type. + */ + using Id = uint64_t; + /** * Bind to a new address:port, start listening and add the listen socket to `m_listen`. * @param[in] to Where to bind. @@ -339,6 +345,11 @@ private: */ std::vector> m_listen; + /** + * The id to assign to the next created connection. + */ + std::atomic m_next_id{0}; + /** * Accept a connection. * @param[in] listen_sock Socket on which to accept the connection. @@ -346,6 +357,11 @@ private: * @return Newly created socket for the accepted connection. */ std::unique_ptr AcceptConnection(const Sock& listen_sock, CService& addr); + + /** + * Generate an id for a newly created connection. + */ + Id GetNewId(); }; } // namespace http_bitcoin