---
name: "io_uring_submit_and_wait_timeout"
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_submit_and_wait_timeout"
---

# io\_uring\_submit\_and\_wait\_timeout(3)

submit requests to the submission queue and wait for the completion with timeout

## NAME

io\_uring\_submit\_and\_wait\_timeout - submit requests to the submission queue and wait for the completion with timeout

## SYNOPSIS

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

**int io\_uring\_submit\_and\_wait\_timeout(struct io\_uring \****ring***,**                                      **struct io\_uring\_cqe \*\****cqe\_ptr***,**                                      **unsigned** *wait\_nr***,**                                      **struct \_\_kernel\_timespec \****ts***,**                                      **sigset\_t \****sigmask***);**

## DESCRIPTION

The [**io\_uring\_submit\_and\_wait\_timeout**(3)](/io_uring_submit_and_wait_timeout/3.md) function submits the next requests from the submission queue belonging to the *ring* and waits for *wait\_nr* completion events, or until the timeout *ts* expires. The completion events are stored in the *cqe\_ptr* array.

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_submit_and_wait_timeout(ring, cqe, wait_nr, ts, NULL);
pthread_sigmask(SIG_SETMASK, &origmask, NULL);
```

After the caller retrieves a submission queue entry (SQE) with [**io\_uring\_get\_sqe**(3)](/io_uring_get_sqe/3.md) and prepares the SQE, it can be submitted with [**io\_uring\_submit\_and\_wait\_timeout**(3)](/io_uring_submit_and_wait_timeout/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\_submit\_and\_wait\_timeout**(3)](/io_uring_submit_and_wait_timeout/3.md) returns the number of submitted submission queue entries. On failure it returns **-errno**. Note that in earlier versions of the liburing library, the return value was 0 on success. The most common failure case is not receiving a completion within the specified timeout, **-ETIME** is returned in this case.

## SEE ALSO

[**io\_uring\_queue\_init\_params**(3)](/io_uring_queue_init_params/3.md), [**io\_uring\_get\_sqe**(3)](/io_uring_get_sqe/3.md), [**io\_uring\_submit**(3)](/io_uring_submit/3.md), [**io\_uring\_submit\_and\_wait**(3)](/io_uring_submit_and_wait/3.md), [**io\_uring\_wait\_cqe**(3)](/io_uring_wait_cqe/3.md)
