| <!-- Generated by zircon/scripts/update-docs-from-fidl, do not edit! --> |
| # zx_port_create |
| |
| ## Summary |
| |
| Create an IO port. |
| |
| ## Declaration |
| |
| ```c |
| #include <zircon/syscalls.h> |
| |
| zx_status_t zx_port_create(uint32_t options, zx_handle_t* out); |
| ``` |
| |
| ## Description |
| |
| `zx_port_create()` creates a port: a waitable object that can be used to read |
| packets queued by kernel or by user-mode. |
| |
| If you need this port to be bound to an interrupt, pass **ZX_PORT_BIND_TO_INTERRUPT** to *options*, |
| otherwise it should be **0**. |
| |
| In the case where a port is bound to an interrupt, the interrupt packets are delivered via a |
| dedicated queue on ports and are higher priority than other non-interrupt packets. |
| |
| The returned handle will have: |
| |
| * `ZX_RIGHT_TRANSFER`: allowing them to be sent to another process through [`zx_channel_write()`]. |
| * `ZX_RIGHT_WRITE`: allowing packets to be *queued*. |
| * `ZX_RIGHT_READ`: allowing packets to be *read*. |
| * `ZX_RIGHT_DUPLICATE`: allowing them to be *duplicated*. |
| |
| ## Rights |
| |
| Caller job policy must allow **ZX_POL_NEW_PORT**. |
| |
| ## Return value |
| |
| `zx_port_create()` returns **ZX_OK** and a valid IO port handle via *out* on |
| success. In the event of failure, an error value is returned. |
| |
| ## Errors |
| |
| **ZX_ERR_INVALID_ARGS** *options* has an invalid value, or *out* is an |
| invalid pointer or NULL. |
| |
| **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 builds this error will no longer occur. |
| |
| ## See also |
| |
| - [`zx_handle_close()`] |
| - [`zx_handle_duplicate()`] |
| - [`zx_handle_replace()`] |
| - [`zx_object_wait_async()`] |
| - [`zx_port_queue()`] |
| - [`zx_port_wait()`] |
| |
| [`zx_channel_write()`]: channel_write.md |
| [`zx_handle_close()`]: handle_close.md |
| [`zx_handle_duplicate()`]: handle_duplicate.md |
| [`zx_handle_replace()`]: handle_replace.md |
| [`zx_object_wait_async()`]: object_wait_async.md |
| [`zx_port_queue()`]: port_queue.md |
| [`zx_port_wait()`]: port_wait.md |
| |