HTTPServer: generate sequential Ids for each newly accepted connection

Co-authored-by: Vasil Dimov <vd@FreeBSD.org>
This commit is contained in:
Matthew Zipkin
2025-06-04 14:19:16 -04:00
parent 5a3aa1af28
commit a85286c5c7
2 changed files with 21 additions and 0 deletions

View File

@@ -1008,4 +1008,9 @@ std::unique_ptr<Sock> 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

View File

@@ -5,6 +5,7 @@
#ifndef BITCOIN_HTTPSERVER_H
#define BITCOIN_HTTPSERVER_H
#include <atomic>
#include <functional>
#include <memory>
#include <optional>
@@ -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<std::shared_ptr<Sock>> m_listen;
/**
* The id to assign to the next created connection.
*/
std::atomic<Id> 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<Sock> AcceptConnection(const Sock& listen_sock, CService& addr);
/**
* Generate an id for a newly created connection.
*/
Id GetNewId();
};
} // namespace http_bitcoin