Barretenberg
The ZK-SNARK library at the core of Aztec
Loading...
Searching...
No Matches
socket_server.hpp
Go to the documentation of this file.
1#pragma once
2
4#include <cstddef>
5#include <cstdint>
6#include <string>
7#include <sys/types.h>
8#include <unordered_map>
9#include <vector>
10
11namespace bb::ipc {
12
21class SocketServer : public IpcServer {
22 public:
23 SocketServer(std::string socket_path, int initial_max_clients);
24 ~SocketServer() override;
25
26 // Non-copyable, non-movable (owns file descriptors)
27 SocketServer(const SocketServer&) = delete;
31
32 bool listen() override;
33 int accept() override;
34 int wait_for_data(uint64_t timeout_ns) override;
35 std::span<const uint8_t> receive(int client_id) override;
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;
39
40 private:
41 void close_internal();
42 void disconnect_client(int client_id);
43 int find_free_slot();
44
45 std::string socket_path_;
47 int listen_fd_ = -1;
48 int fd_ = -1; // kqueue or epoll fd
49 std::vector<int> client_fds_; // client_id -> fd
50 std::unordered_map<int, int> fd_to_client_id_; // fd -> client_id (for fast lookup)
51 std::vector<std::vector<uint8_t>> recv_buffers_; // client_id -> recv buffer
52 int num_clients_ = 0;
53};
54
55} // namespace bb::ipc
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
Definition tuple.hpp:13
uint8_t len