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

IPC server implementation using Unix domain sockets. More...

#include <socket_server.hpp>

Inheritance diagram for bb::ipc::SocketServer:
bb::ipc::IpcServer

Public Member Functions

 SocketServer (std::string socket_path, int initial_max_clients)
 
 ~SocketServer () override
 
 SocketServer (const SocketServer &)=delete
 
SocketServeroperator= (const SocketServer &)=delete
 
 SocketServer (SocketServer &&)=delete
 
SocketServeroperator= (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
 
IpcServeroperator= (const IpcServer &)=delete
 
 IpcServer (IpcServer &&)=delete
 
IpcServeroperator= (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< 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 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 }
 

Detailed Description

IPC server implementation using Unix domain sockets.

Platform-specific implementation:

  • Linux: uses epoll for efficient multi-client handling
  • macOS: uses kqueue for efficient multi-client handling Dynamic client capacity with no artificial limits.

Definition at line 21 of file socket_server.hpp.

Constructor & Destructor Documentation

◆ SocketServer() [1/3]

bb::ipc::SocketServer::SocketServer ( std::string  socket_path,
int  initial_max_clients 
)

Definition at line 23 of file socket_server.cpp.

◆ ~SocketServer()

bb::ipc::SocketServer::~SocketServer ( )
override

Definition at line 32 of file socket_server.cpp.

◆ SocketServer() [2/3]

bb::ipc::SocketServer::SocketServer ( const SocketServer )
delete

◆ SocketServer() [3/3]

bb::ipc::SocketServer::SocketServer ( SocketServer &&  )
delete

Member Function Documentation

◆ accept()

int bb::ipc::SocketServer::accept ( )
overridevirtual

Accept a new client connection (optional for some transports)

Parameters
timeout_nsTimeout in nanoseconds (0 = non-blocking, <0 = infinite)
Returns
Client ID if successful, -1 if no pending connection or error

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.

◆ close()

void bb::ipc::SocketServer::close ( )
overridevirtual

Close the server and all client connections.

Implements bb::ipc::IpcServer.

Definition at line 37 of file socket_server.cpp.

◆ close_internal()

void bb::ipc::SocketServer::close_internal ( )
private

Definition at line 42 of file socket_server.cpp.

◆ disconnect_client()

void bb::ipc::SocketServer::disconnect_client ( int  client_id)
private

Definition at line 548 of file socket_server.cpp.

◆ find_free_slot()

int bb::ipc::SocketServer::find_free_slot ( )
private

Definition at line 68 of file socket_server.cpp.

◆ listen()

bool bb::ipc::SocketServer::listen ( )
overridevirtual

Start listening for client connections.

Returns
true if successful, false otherwise

Implements bb::ipc::IpcServer.

Definition at line 386 of file socket_server.cpp.

◆ operator=() [1/2]

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

◆ operator=() [2/2]

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

◆ receive()

std::span< const uint8_t > bb::ipc::SocketServer::receive ( int  client_id)
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.

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

Implements bb::ipc::IpcServer.

Definition at line 114 of file socket_server.cpp.

◆ release()

void bb::ipc::SocketServer::release ( int  client_id,
size_t  message_size 
)
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).

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

Implements bb::ipc::IpcServer.

Definition at line 107 of file socket_server.cpp.

◆ send()

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

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 81 of file socket_server.cpp.

◆ wait_for_data()

int bb::ipc::SocketServer::wait_for_data ( uint64_t  timeout_ns)
overridevirtual

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 518 of file socket_server.cpp.

Member Data Documentation

◆ client_fds_

std::vector<int> bb::ipc::SocketServer::client_fds_
private

Definition at line 49 of file socket_server.hpp.

◆ fd_

int bb::ipc::SocketServer::fd_ = -1
private

Definition at line 48 of file socket_server.hpp.

◆ fd_to_client_id_

std::unordered_map<int, int> bb::ipc::SocketServer::fd_to_client_id_
private

Definition at line 50 of file socket_server.hpp.

◆ initial_max_clients_

int bb::ipc::SocketServer::initial_max_clients_
private

Definition at line 46 of file socket_server.hpp.

◆ listen_fd_

int bb::ipc::SocketServer::listen_fd_ = -1
private

Definition at line 47 of file socket_server.hpp.

◆ num_clients_

int bb::ipc::SocketServer::num_clients_ = 0
private

Definition at line 52 of file socket_server.hpp.

◆ recv_buffers_

std::vector<std::vector<uint8_t> > bb::ipc::SocketServer::recv_buffers_
private

Definition at line 51 of file socket_server.hpp.

◆ socket_path_

std::string bb::ipc::SocketServer::socket_path_
private

Definition at line 45 of file socket_server.hpp.


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