You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
A minimal cross-platform high-performance async I/O library written in Zig.
Features
Reactor/proactor-based I/O notification support
epoll (linux)
kqueue (darwin)
i/o completion ports (windows)
Async POSIX socket support
bind, listen, connect, accept
read, recv, recvFrom
write, send, sendTo
get/set socket options
Async Windows socket support
bind, listen, connect, accept
read, recv, recvFrom
write, send, sendTo
get/set socket options
Async signal support
signalfd for epoll (linux)
EVFILT_SIGNAL for kqueue (darwin)
SetConsoleCtrlHandler for i/o completion ports (windows)
Async event support
sigaction (posix)
SetConsoleCtrlHandler (windows)
Design
Notifier
A Notifier notifies of the completion of I/O events, or of the read/write-readiness of registered file descriptors/handles.
Should a Notifier report the completion of I/O events, it is designated to wrap around a proactor-based I/O notification layer in the operating system such as I/O completion ports on Windows.
Should a Notifier report the read/write-readiness of registered file descriptors/handles, it is designated to wrap around a reactor-based I/O notification layer in the operating system such as epoll on Linux, or kqueue on Darwin-based operating systems.
The Notifier's purpose is to drive the execution of asynchronous I/O syscalls upon the notification of a reactor/proactor-based I/O event by dispatching suspended asynchronous function frames to be resumed by a thread pool/scheduler (e.g. kprotty/zap).
Handle
A Handle's implementation is specific to a Notifier implementation, though overall wraps around and represents a file descriptor/handle in a program.
Subject to the Notifier implementation a Handle's implementation falls under, state required to drive asynchronous I/O syscalls through a Handle is kept inside a Handle.
An example would be an intrusive linked list of suspended asynchronous function frames that are to be resumed upon the recipient of a notification that a file descriptor/handle is ready to be written to/read from.