Barretenberg
The ZK-SNARK library at the core of Aztec
Loading...
Searching...
No Matches
bb::ipc::ShmServer Class Reference

IPC server implementation using shared memory. More...

#include <shm_server.hpp>

Inheritance diagram for bb::ipc::ShmServer:
bb::ipc::IpcServer

Public Member Functions

 ShmServer (std::string base_name, size_t request_ring_size=DEFAULT_RING_SIZE, size_t response_ring_size=DEFAULT_RING_SIZE)
 
 ~ShmServer () override
 
 ShmServer (const ShmServer &)=delete
 
ShmServeroperator= (const ShmServer &)=delete
 
 ShmServer (ShmServer &&)=delete
 
ShmServeroperator= (ShmServer &&)=delete
 
bool listen () override
 Start listening for client connections.
 
int wait_for_data (uint64_t timeout_ns) override
 Wait for data from any connected client.
 
std::span< const uint8_t > receive (int client_id) override
 Receive next message from a specific client.
 
void release (int client_id, size_t message_size) override
 Release/consume the previously received message.
 
bool send (int client_id, const void *data, size_t len) override
 Send a message to a specific client.
 
void close () override
 Close the server and all client connections.
 
void wakeup_all () override
 Wake all blocked threads (for graceful shutdown)
 
void debug_dump () const
 
- Public Member Functions inherited from bb::ipc::IpcServer
 IpcServer ()=default
 
virtual ~IpcServer ()=default
 
 IpcServer (const IpcServer &)=delete
 
IpcServeroperator= (const IpcServer &)=delete
 
 IpcServer (IpcServer &&)=delete
 
IpcServeroperator= (IpcServer &&)=delete
 
virtual void request_shutdown ()
 Request graceful shutdown.
 
virtual int accept ()
 Accept a new client connection (optional for some transports)
 
virtual void run (const Handler &handler)
 Run server event loop with handler.
 

Static Public Attributes

static constexpr size_t DEFAULT_RING_SIZE = 1 << 20
 

Private Attributes

std::string base_name_
 
size_t request_ring_size_
 
size_t response_ring_size_
 
std::optional< SpscShmrequest_ring_
 
std::optional< SpscShmresponse_ring_
 

Additional Inherited Members

- Public Types inherited from bb::ipc::IpcServer
using Handler = std::function< std::vector< uint8_t >(int client_id, std::span< const uint8_t > request)>
 High-level request handler function type.
 
- Static Public Member Functions inherited from bb::ipc::IpcServer
static std::unique_ptr< IpcServercreate_socket (const std::string &socket_path, int max_clients)
 
static std::unique_ptr< IpcServercreate_shm (const std::string &base_name, size_t request_ring_size=static_cast< size_t >(1024 *1024), size_t response_ring_size=static_cast< size_t >(1024 *1024))
 
- Protected Attributes inherited from bb::ipc::IpcServer
std::atomic< bool > shutdown_requested_ { false }
 

Detailed Description

IPC server implementation using shared memory.

Uses SPSC (single-producer single-consumer) for both requests and responses. Simple 1:1 client-server communication.

Definition at line 26 of file shm_server.hpp.

Constructor & Destructor Documentation

◆ ShmServer() [1/3]

bb::ipc::ShmServer::ShmServer ( std::string  base_name,
size_t  request_ring_size = DEFAULT_RING_SIZE,
size_t  response_ring_size = DEFAULT_RING_SIZE 
)
inline

Definition at line 30 of file shm_server.hpp.

◆ ~ShmServer()

bb::ipc::ShmServer::~ShmServer ( )
inlineoverride

Definition at line 38 of file shm_server.hpp.

◆ ShmServer() [2/3]

bb::ipc::ShmServer::ShmServer ( const ShmServer )
delete

◆ ShmServer() [3/3]

bb::ipc::ShmServer::ShmServer ( ShmServer &&  )
delete

Member Function Documentation

◆ close()

void bb::ipc::ShmServer::close ( )
inlineoverridevirtual

Close the server and all client connections.

Implements bb::ipc::IpcServer.

Definition at line 111 of file shm_server.hpp.

◆ debug_dump()

void bb::ipc::ShmServer::debug_dump ( ) const
inline

Definition at line 135 of file shm_server.hpp.

◆ listen()

bool bb::ipc::ShmServer::listen ( )
inlineoverridevirtual

Start listening for client connections.

Returns
true if successful, false otherwise

Implements bb::ipc::IpcServer.

Definition at line 46 of file shm_server.hpp.

◆ operator=() [1/2]

ShmServer & bb::ipc::ShmServer::operator= ( const ShmServer )
delete

◆ operator=() [2/2]

ShmServer & bb::ipc::ShmServer::operator= ( ShmServer &&  )
delete

◆ receive()

std::span< const uint8_t > bb::ipc::ShmServer::receive ( int  client_id)
inlineoverridevirtual

Receive next message from a specific client.

Blocks until a complete message is available. Returns a span pointing to the message data. For shared memory, this is a zero-copy view directly into the ring buffer. For sockets, this is a view into an internal buffer.

The message remains valid until release() is called with the message size.

Parameters
client_idClient to receive from
Returns
Span of message data (empty only on error/disconnect)

Implements bb::ipc::IpcServer.

Definition at line 86 of file shm_server.hpp.

◆ release()

void bb::ipc::ShmServer::release ( int  client_id,
size_t  message_size 
)
inlineoverridevirtual

Release/consume the previously received message.

Must be called after receive() to advance to the next message. For shared memory, this releases space in the ring buffer. For sockets, this is a no-op (message already consumed during receive).

Parameters
client_idClient whose message to release
message_sizeSize of the message being released (from span.size())

Implements bb::ipc::IpcServer.

Definition at line 95 of file shm_server.hpp.

◆ send()

bool bb::ipc::ShmServer::send ( int  client_id,
const void *  data,
size_t  len 
)
inlineoverridevirtual

Send a message to a specific client.

Parameters
client_idClient to send to
dataPointer to message data
lenLength of message in bytes
Returns
true if sent successfully, false on error

Implements bb::ipc::IpcServer.

Definition at line 103 of file shm_server.hpp.

◆ wait_for_data()

int bb::ipc::ShmServer::wait_for_data ( uint64_t  timeout_ns)
inlineoverridevirtual

Wait for data from any connected client.

Parameters
timeout_nsMaximum time to wait in nanoseconds (0 = non-blocking poll)
Returns
Client ID that has data available, or -1 on timeout/error

Implements bb::ipc::IpcServer.

Definition at line 72 of file shm_server.hpp.

◆ wakeup_all()

void bb::ipc::ShmServer::wakeup_all ( )
inlineoverridevirtual

Wake all blocked threads (for graceful shutdown)

Wakes any threads blocked in wait_for_data() or other blocking operations. Used by signal handlers to trigger graceful shutdown without waiting for timeouts.

Reimplemented from bb::ipc::IpcServer.

Definition at line 124 of file shm_server.hpp.

Member Data Documentation

◆ base_name_

std::string bb::ipc::ShmServer::base_name_
private

Definition at line 146 of file shm_server.hpp.

◆ DEFAULT_RING_SIZE

constexpr size_t bb::ipc::ShmServer::DEFAULT_RING_SIZE = 1 << 20
staticconstexpr

Definition at line 28 of file shm_server.hpp.

◆ request_ring_

std::optional<SpscShm> bb::ipc::ShmServer::request_ring_
private

Definition at line 149 of file shm_server.hpp.

◆ request_ring_size_

size_t bb::ipc::ShmServer::request_ring_size_
private

Definition at line 147 of file shm_server.hpp.

◆ response_ring_

std::optional<SpscShm> bb::ipc::ShmServer::response_ring_
private

Definition at line 150 of file shm_server.hpp.

◆ response_ring_size_

size_t bb::ipc::ShmServer::response_ring_size_
private

Definition at line 148 of file shm_server.hpp.


The documentation for this class was generated from the following file: