|
I wrote vibe, a small single-header C library for framed TCP and Unix-domain-socket messaging on Linux: https://github.com/xtellect/vibe It uses one background epoll thread. Application code polls an inbox queue for CONNECTED, DATA, and DISCONNECTED events, and sends through per-connection outboxes. The pieces I wanted: - TCP or Unix stream sockets
- 4-byte length-prefixed messages
- non-blocking application-side polling
- single-copy fan-out via refcounted payload chunks
- explicit per-connection backpressure instead of unbounded queues For multicast, the payload is copied once into a refcounted chunk, then queued by reference to each recipient. A 1 KB message to 1,000 peers is one payload allocation/copy plus 1,000 queue nodes, not 1,000 payload copies. It is Linux-only for now: epoll, eventfd, accept4, and Linux abstract Unix sockets. No UDP, TLS, HTTP, or WebSocket layer. This is not meant to be a full networking framework. I’m posting mainly for your inputs/revies, especially around connection lifetimes, backpressure accounting, edge cases, and the queue design. Apache 2.0. |