[Libguestfs] Libnbd asynchronous API with epoll

Nir Soffer
Thu, 06 Jul 2023 17:06:35 -0000

On Wed, Jul 5, 2023 at 3:38?PM Tage Johansson <tage.j.lists at 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
-------------- next part --------------
An HTML attachment was scrubbed...
URL:
<http://listman.redhat.com/archives/libguestfs/attachments/20230706/b01f8b96/attachment.htm>