8#include <unordered_map>
23 SocketServer(std::string socket_path,
int initial_max_clients);
36 void release(
int client_id,
size_t message_size)
override;
37 bool send(
int client_id,
const void*
data,
size_t len)
override;
38 void close()
override;
Abstract interface for IPC server.
IPC server implementation using Unix domain sockets.
int accept() override
Accept a new client connection (optional for some transports)
std::vector< std::vector< uint8_t > > recv_buffers_
bool listen() override
Start listening for client connections.
std::vector< int > client_fds_
void close() override
Close the server and all client connections.
std::unordered_map< int, int > fd_to_client_id_
void disconnect_client(int client_id)
SocketServer & operator=(const SocketServer &)=delete
SocketServer(const SocketServer &)=delete
SocketServer(SocketServer &&)=delete
bool send(int client_id, const void *data, size_t len) override
Send a message to a specific client.
std::span< const uint8_t > receive(int client_id) override
Receive next message from a specific client.
SocketServer & operator=(SocketServer &&)=delete
void release(int client_id, size_t message_size) override
Release/consume the previously received message.
int wait_for_data(uint64_t timeout_ns) override
Wait for data from any connected client.
const std::vector< MemoryValue > data
constexpr decltype(auto) get(::tuplet::tuple< T... > &&t) noexcept