hringas 0.6.0

no libc, no_std, pure rust bindings to io_uring
Documentation

ᚻᚱᛁᚾᚷᚪᛋ

Low-level IoUring bindings in pure rust.

  • no_std
  • does not link libc
  • simple API

It's heavily based off of std.os.linux.IoUring.zig, but also takes some pointers (lol) from liburing.

docs

example

⚠️ WIP, not all tests have been implemented yet ⚠️

IoUring.zig test Passes
structs/offsets/entries
nop
readv
writev/fsync/readv
write/read
splice/read
write_fixed/read_fixed
openat
close
accept/connect/send/recv
sendmsg/recvmsg
timeout (after a relative time)
timeout (after a number of completions)
timeout_remove
accept/connect/recv/link_timeout
fallocate
statx
accept/connect/recv/cancel
register_files_update
shutdown
renameat
unlinkat
mkdirat
symlinkat
linkat
provide_buffers: read
remove_buffers
provide_buffers: accept/connect/send/recv
accept multishot
accept/connect/send_zc/recv
accept_direct
accept_multishot_direct
socket
socket_direct/socket_direct_alloc/close_direct
openat_direct/close_direct
waitid
BufferGroup
ring mapped buffers recv
ring mapped buffers multishot recv
copy_cqes with wrapping sq.cqes buffer
bind/listen/connect

Contribute

Pull requests welcome.

Constructive, specific, and actionable feedback is also appreciated.

Why make more bindings when others exist?

I wanted a simpler interface than tokio-rs/io-uring. I also did not want to link libc, or compile C code. No other library satisifed this goal, so I made my own.