# zx_eventpair_create

## Summary

Create an event pair.

## Declaration

    #include <zircon/syscalls.h>

    zx_status_t zx_eventpair_create(uint32_t options,
                                    zx_handle_t* out0,
                                    zx_handle_t* out1);

## Description

`zx_eventpair_create()` creates an event pair, which is a pair of objects that
are mutually signalable.

The signals `ZX_EVENTPAIR_SIGNALED` and `ZX_USER_SIGNAL_n` (where *n* is 0 through 7)
may be set or cleared using [`zx_object_signal()`](https://fuchsia.dev/reference/syscalls/object_signal), which modifies the signals on the
object itself, or [`zx_object_signal_peer()`](https://fuchsia.dev/reference/syscalls/object_signal_peer), which modifies the signals on its
counterpart.

When all the handles to one of the objects have been closed, the
`ZX_EVENTPAIR_PEER_CLOSED` signal will be asserted on the opposing object.

The newly-created handles will have the `ZX_RIGHT_TRANSFER`,
`ZX_RIGHT_DUPLICATE`, `ZX_RIGHT_READ`, `ZX_RIGHT_WRITE`, `ZX_RIGHT_SIGNAL`,
and `ZX_RIGHT_SIGNAL_PEER` rights.

Currently, no options are supported, so *options* must be set to 0.

## Rights

Caller job policy must allow `ZX_POL_NEW_EVENTPAIR`.

## Return value

`zx_eventpair_create()` returns `ZX_OK` on success. On failure, a (negative)
error code is returned.

## Errors

`ZX_ERR_INVALID_ARGS` *out0* or *out1* is an invalid pointer or NULL.

`ZX_ERR_NOT_SUPPORTED` *options* has an unsupported flag set (i.e., is not 0).

`ZX_ERR_NO_MEMORY` Failure due to lack of memory.
There is no good way for userspace to handle this (unlikely) error.
In a future build this error will no longer occur.

## See also

- [`zx_event_create()`](https://fuchsia.dev/reference/syscalls/event_create)
- [`zx_handle_close()`](https://fuchsia.dev/reference/syscalls/handle_close)
- [`zx_handle_duplicate()`](https://fuchsia.dev/reference/syscalls/handle_duplicate)
- [`zx_handle_replace()`](https://fuchsia.dev/reference/syscalls/handle_replace)
- [`zx_object_signal()`](https://fuchsia.dev/reference/syscalls/object_signal)
- [`zx_object_signal_peer()`](https://fuchsia.dev/reference/syscalls/object_signal_peer)
- [`zx_object_wait_async()`](https://fuchsia.dev/reference/syscalls/object_wait_async)
- [`zx_object_wait_many()`](https://fuchsia.dev/reference/syscalls/object_wait_many)
- [`zx_object_wait_one()`](https://fuchsia.dev/reference/syscalls/object_wait_one)