|
Barretenberg
The ZK-SNARK library at the core of Aztec
|
IPC server implementation using Unix domain sockets. More...
#include <socket_server.hpp>
Public Member Functions | |
| SocketServer (std::string socket_path, int initial_max_clients) | |
| ~SocketServer () override | |
| SocketServer (const SocketServer &)=delete | |
| SocketServer & | operator= (const SocketServer &)=delete |
| SocketServer (SocketServer &&)=delete | |
| SocketServer & | operator= (SocketServer &&)=delete |
| bool | listen () override |
| Start listening for client connections. | |
| int | accept () override |
| Accept a new client connection (optional for some transports) | |
| 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. | |
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 void | run (const Handler &handler) |
| Run server event loop with handler. | |
Private Member Functions | |
| void | close_internal () |
| void | disconnect_client (int client_id) |
| int | find_free_slot () |
Private Attributes | |
| std::string | socket_path_ |
| int | initial_max_clients_ |
| int | listen_fd_ = -1 |
| int | fd_ = -1 |
| std::vector< int > | client_fds_ |
| std::unordered_map< int, int > | fd_to_client_id_ |
| std::vector< std::vector< uint8_t > > | recv_buffers_ |
| int | num_clients_ = 0 |
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 Member Functions inherited from bb::ipc::IpcServer | |
| virtual void | wakeup_all () |
| Wake all blocked threads (for graceful shutdown) | |
Protected Attributes inherited from bb::ipc::IpcServer | |
| std::atomic< bool > | shutdown_requested_ { false } |
IPC server implementation using Unix domain sockets.
Platform-specific implementation:
Definition at line 21 of file socket_server.hpp.
| bb::ipc::SocketServer::SocketServer | ( | std::string | socket_path, |
| int | initial_max_clients | ||
| ) |
Definition at line 23 of file socket_server.cpp.
|
override |
Definition at line 32 of file socket_server.cpp.
|
delete |
|
delete |
|
overridevirtual |
Accept a new client connection (optional for some transports)
| timeout_ns | Timeout in nanoseconds (0 = non-blocking, <0 = infinite) |
Note: Some transports (like shared memory) may not need explicit accept calls.
Reimplemented from bb::ipc::IpcServer.
Definition at line 455 of file socket_server.cpp.
|
overridevirtual |
Close the server and all client connections.
Implements bb::ipc::IpcServer.
Definition at line 37 of file socket_server.cpp.
|
private |
Definition at line 42 of file socket_server.cpp.
|
private |
Definition at line 548 of file socket_server.cpp.
|
private |
Definition at line 68 of file socket_server.cpp.
|
overridevirtual |
Start listening for client connections.
Implements bb::ipc::IpcServer.
Definition at line 386 of file socket_server.cpp.
|
delete |
|
delete |
|
overridevirtual |
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 114 of file socket_server.cpp.
|
overridevirtual |
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 107 of file socket_server.cpp.
|
overridevirtual |
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 81 of file socket_server.cpp.
|
overridevirtual |
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 518 of file socket_server.cpp.
|
private |
Definition at line 49 of file socket_server.hpp.
|
private |
Definition at line 48 of file socket_server.hpp.
|
private |
Definition at line 50 of file socket_server.hpp.
|
private |
Definition at line 46 of file socket_server.hpp.
|
private |
Definition at line 47 of file socket_server.hpp.
|
private |
Definition at line 52 of file socket_server.hpp.
|
private |
Definition at line 51 of file socket_server.hpp.
|
private |
Definition at line 45 of file socket_server.hpp.