---
name: "nng_aio_set_iov"
section: "3"
platform: "linux"
package: "libnng-dev"
version: "1.10.1-2"
release: "Debian 13 (Trixie)"
platforms: ["linux"]
url: "https://new.carta.tech/nng_aio_set_iov"
---

# nng\_aio\_set\_iov(3)

set scatter/gather vector

## NAME

nng\_aio\_set\_iov - set scatter/gather vector

## SYNOPSIS

```
#include <nng/nng.h>
int nng_aio_set_iov(nng_aio *aio, unsigned int niov, nng_iov *iov);
```

## DESCRIPTION

The `nng_aio_set_iov()` function sets a scatter/gather vector *iov* on the handle *aio*.

The *iov* is a pointer to an array of *niov* `nng_iov` structures, which have the following definition:

```
    typedef struct nng_iov {
        void * iov_buf;
        size_t iov_len;
    };
```

The *iov* is copied into storage in the *aio* itself, so that callers may use stack allocated `nng_iov` structures. The values pointed to by the `iov_buf` members are **not** copied by this function though.

A maximum of four (4) `nng_iov` members may be supplied.

**Note**\

Earlier versions of the library could accept longer scatter-gather lists. However, no known consumers have ever needed a scatter-gather list longer than 4 vectors. As a result, the implementation limit was reduced, and heap allocations which could fail were removed.

## RETURN VALUES

This function returns 0 on success, and non-zero otherwise.

## ERRORS

`NNG_EINVAL`

Value of specified *niov* is too large.

## SEE ALSO

[nng\_aio\_alloc(3)](/nng_aio_alloc/3.md), [nng\_aio\_cancel(3)](/nng_aio_cancel/3.md), [nng\_aio\_count(3)](/nng_aio_count/3.md), [nng\_aio\_result(3)](/nng_aio_result/3.md), [nng\_aio(5)](/nng_aio/5.md), [nng\_iov(5)](/nng_iov/5.md), [nng(7)](/nng/7.md)
