# Design

> UCall for C

- __Backends.__
  Select `automatic`, `posix`, `linux-epollaio`, `linux-uring612`, `linux-uring618`, `bsd-kqueue`, or `windows-iocp` in the server or client configuration; explicit unavailable selections fail.
  All variants use the same HTTP/1.1 and Noise connection automata.
- __io_uring.__
  Both io_uring variants use registered files, direct descriptors, an incremental provided receive-buffer ring, a sparse table of registered buffers, `SEND_ZC` zero-copy sends and `READ_FIXED` file reads.
  The 6.18 variant adds multishot receive and vectored `READV_FIXED` file reads.
- __Readiness and completion ports.__
  `linux-epollaio` reads files through Linux AIO completing into its epoll set, sends with `MSG_ZEROCOPY`, and refuses to start where `io_setup` is refused, naming `fs.aio-max-nr`.
  `posix` and macOS `kqueue` read files blocking, FreeBSD `kqueue` through `aio_read`, and IOCP through overlapped unbuffered reads; these send by copying.
- __Credit-limited accepts.__
  Accepts remain one-shot operations: multishot direct accept can consume more connections than a finite file table can install before userspace observes a completion.

