io\_uring\_wait\_cqes(3) liburing Manual io\_uring\_wait\_cqes(3)

# [NAME](#NAME)

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

# [SYNOPSIS](#SYNOPSIS)

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

```
int io_uring_wait_cqes(struct io_uring *ring,
                       struct io_uring_cqe **cqe_ptr,
                       unsigned wait_nr,
                       struct __kernel_timespec *ts,
                       sigset_t *sigmask);
```

# [DESCRIPTION](#DESCRIPTION)

The [**io\_uring\_wait\_cqes**(3)](/man/os/liburing/io_uring_wait_cqes.3) function returns *wait\_nr* IO completions from the queue belonging to the *ring* param, waiting for them if necessary or until the timeout *ts* expires.

The *sigmask* specifies the set of signals to block. If set, it is equivalent to atomically executing the following calls:

```
sigset_t origmask;
pthread_sigmask(SIG_SETMASK, &sigmask, &origmask);
ret = io_uring_wait_cqes(ring, cqe, wait_nr, ts, NULL);
pthread_sigmask(SIG_SETMASK, &origmask, NULL);
```

The *cqe\_ptr* param is filled in on success with the first CQE. Callers of this function should use [**io\_uring\_for\_each\_cqe**(3)](/man/os/liburing/io_uring_for_each_cqe.3) to iterate all available CQEs.

If *ts* is specified and an older kernel without **IORING\_FEAT\_EXT\_ARG** is used, the application does not need to call [**io\_uring\_submit**(3)](/man/os/liburing/io_uring_submit.3) before calling [**io\_uring\_wait\_cqes**(3)](/man/os/liburing/io_uring_wait_cqes.3). For newer kernels with that feature flag set, there is no implied submit when waiting for a request.

If *ts* is **NULL ,** then this behaves like [**io\_uring\_wait\_cqe**(3)](/man/os/liburing/io_uring_wait_cqe.3) in that it will wait forever for an event.

# [RETURN VALUE](#RETURN_VALUE)

On success [**io\_uring\_wait\_cqes**(3)](/man/os/liburing/io_uring_wait_cqes.3) returns 0 and the cqe\_ptr param is filled in. On failure it returns **-errno**. If a timeout occurs, it will return **-ETIME**.

# [SEE ALSO](#SEE_ALSO)

[**io\_uring\_submit**(3)](/man/os/liburing/io_uring_submit.3), [**io\_uring\_for\_each\_cqe**(3)](/man/os/liburing/io_uring_for_each_cqe.3), [**io\_uring\_wait\_cqe\_timeout**(3)](/man/os/liburing/io_uring_wait_cqe_timeout.3), [**io\_uring\_wait\_cqe**(3)](/man/os/liburing/io_uring_wait_cqe.3)

November 15, 2021 liburing-2.1

---

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