On Wed, Jul 5, 2023 at 3:38 PM Tage Johansson <tage.j.lists(a)posteo.net>
wrote:
As part of the Rust bindings for Libnbd, I try to integrate the
asynchronous (aio_*) functions with Tokio
<
https://docs.rs/tokio/latest/tokio/>, the most used asynchronous runtime
in Rust. However, in its eventloop, Tokio uses epoll(7) instead of poll(2)
(which is used internally in Libnbd). The difference is that poll(2) uses
level-triggered notifications as aposed to epoll(7) which uses
edge-triggered notifications.
According to epoll(7) section "Level-triggered and edge-triggered" says:
By contrast, when used as a level-triggered interface (the
default,
when EPOLLET is not specified), epoll is simply a faster poll(2),
and
can be used wherever the latter is used since it shares the same
seman‐
tics.
So you should not have any issue using epoll instead of poll.
- After calling aio_get_direction(3), can I know that
reading/writing
would actually block?
No, this is just the events that libnbd wants to get.
- After calling for example aio_notify_read(3), can I know that the next
reading from the file descriptor would block?
No, you have to call again aio_get_direction() and poll again until the
event happens.
Nir