|
Barretenberg
The ZK-SNARK library at the core of Aztec
|
IPC server implementation using shared memory. More...
#include <shm_server.hpp>
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 | |
| ShmServer & | operator= (const ShmServer &)=delete |
| ShmServer (ShmServer &&)=delete | |
| ShmServer & | operator= (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 | |
| IpcServer & | operator= (const IpcServer &)=delete |
| IpcServer (IpcServer &&)=delete | |
| IpcServer & | operator= (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< SpscShm > | request_ring_ |
| std::optional< SpscShm > | response_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< IpcServer > | create_socket (const std::string &socket_path, int max_clients) |
| static std::unique_ptr< IpcServer > | create_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 } |
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.
|
inline |
Definition at line 30 of file shm_server.hpp.
|
inlineoverride |
Definition at line 38 of file shm_server.hpp.
|
delete |
|
delete |
|
inlineoverridevirtual |
Close the server and all client connections.
Implements bb::ipc::IpcServer.
Definition at line 111 of file shm_server.hpp.
|
inline |
Definition at line 135 of file shm_server.hpp.
|
inlineoverridevirtual |
Start listening for client connections.
Implements bb::ipc::IpcServer.
Definition at line 46 of file shm_server.hpp.
|
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.
| client_id | Client to receive from |
Implements bb::ipc::IpcServer.
Definition at line 86 of file shm_server.hpp.
|
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).
| client_id | Client whose message to release |
| message_size | Size of the message being released (from span.size()) |
Implements bb::ipc::IpcServer.
Definition at line 95 of file shm_server.hpp.
|
inlineoverridevirtual |
Send a message to a specific client.
| client_id | Client to send to |
| data | Pointer to message data |
| len | Length of message in bytes |
Implements bb::ipc::IpcServer.
Definition at line 103 of file shm_server.hpp.
|
inlineoverridevirtual |
Wait for data from any connected client.
| timeout_ns | Maximum time to wait in nanoseconds (0 = non-blocking poll) |
Implements bb::ipc::IpcServer.
Definition at line 72 of file shm_server.hpp.
|
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.
|
private |
Definition at line 146 of file shm_server.hpp.
|
staticconstexpr |
Definition at line 28 of file shm_server.hpp.
|
private |
Definition at line 149 of file shm_server.hpp.
|
private |
Definition at line 147 of file shm_server.hpp.
|
private |
Definition at line 150 of file shm_server.hpp.
|
private |
Definition at line 148 of file shm_server.hpp.