The client is non-blocking and it's modelled as a state machine using io_uring to handle IO without sys-calls.
A simple example is within examples, to run the example do:
foo@bar:~$ cd test_server
foo@bar:~$ npm i
foo@bar:~$ node server.js
open a new terminal and run (you can skip --release if you want):
foo@bar:~$ cargo run --release --example main
Using the client never blocks except on DNS lookup, when creating a new client object a dns lookup is made. You can therefore assume ~1ms of blocking on new().
This crate uses raw file descriptors and io_uring, it's therefore platform dependant and requires a >= 5.1 kernel. To check wether or not you system supports io_uring you can run:
foo@bar:~$ grep -i uring /boot/config-$(uname -r)