io\_uring\_wait\_cqe\_nr(3) liburing Manual io\_uring\_wait\_cqe\_nr(3)

# [NAME](#NAME)

io\_uring\_wait\_cqe\_nr - wait for one or more io\_uring completion events

# [SYNOPSIS](#SYNOPSIS)

```
#include <liburing.h>
```

```
int io_uring_wait_cqe_nr(struct io_uring *ring,
                         struct io_uring_cqe **cqe_ptr,
                         unsigned wait_nr);
```

# [DESCRIPTION](#DESCRIPTION)

The [**io\_uring\_wait\_cqe\_nr**(3)](/man/os/liburing/io_uring_wait_cqe_nr.3) function returns *wait\_nr* IO completion events from the queue belonging to the *ring* param, waiting for it if necessary. If the requested number of events are already available in the ring when invoked, no waiting will occur. The *cqe\_ptr* param is filled in on success.

After the caller has submitted a request with [**io\_uring\_submit**(3)](/man/os/liburing/io_uring_submit.3), the application can retrieve the completion with [**io\_uring\_wait\_cqe**(3)](/man/os/liburing/io_uring_wait_cqe.3).

Ideally used with a ring setup with **IORING\_SETUP\_SINGLE\_ISSUER**|**IORING\_SETUP\_DEFER\_TASKRUN** as that will greatly reduce the number of context switches that an application will see waiting on multiple requests.

# [RETURN VALUE](#RETURN_VALUE)

On success [**io\_uring\_wait\_cqe\_nr**(3)](/man/os/liburing/io_uring_wait_cqe_nr.3) returns 0 and the cqe\_ptr param is filled in. On failure it returns **-errno**. The return value indicates the result of waiting for a CQE, and it has no relation to the CQE result itself.

# [SEE ALSO](#SEE_ALSO)

[**io\_uring\_queue\_init\_params**(3)](/man/os/liburing/io_uring_queue_init_params.3), [**io\_uring\_submit**(3)](/man/os/liburing/io_uring_submit.3), [**io\_uring\_wait\_cqes**(3)](/man/os/liburing/io_uring_wait_cqes.3)

November 15, 2021 liburing-2.1

---

Document: io_uring_wait_cqe_nr(3) from liburing 2.15-r4 (Chainguard OS)
Source: https://github.com/axboe/liburing.git
