---
name: "io_uring_wait_cqe_nr"
section: "3"
platform: "linux"
package: "liburing"
version: "2.15-1"
release: "Arch Linux 2026-11-01"
platforms: ["linux"]
url: "https://new.carta.tech/io_uring_wait_cqe_nr"
---

# io\_uring\_wait\_cqe\_nr(3)

wait for one or more io\_uring completion events

## NAME

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

## SYNOPSIS

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

**int io\_uring\_wait\_cqe\_nr(struct io\_uring \****ring***,**                          **struct io\_uring\_cqe \*\****cqe\_ptr***,**                          **unsigned** *wait\_nr***);**

## DESCRIPTION

The [**io\_uring\_wait\_cqe\_nr**(3)](/io_uring_wait_cqe_nr/3.md) 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)](/io_uring_submit/3.md), the application can retrieve the completion with [**io\_uring\_wait\_cqe**(3)](/io_uring_wait_cqe/3.md).

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

On success [**io\_uring\_wait\_cqe\_nr**(3)](/io_uring_wait_cqe_nr/3.md) 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

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