Google is committed to advancing racial equity for Black communities. See how.

zx_port_queue

NAME

Queue a packet to a port.

SYNOPSIS

#include <zircon/syscalls.h>
#include <zircon/syscalls/port.h>

zx_status_t zx_port_queue(zx_handle_t handle, const zx_port_packet_t* packet);

DESCRIPTION

zx_port_queue() queues a packet to the port specified by handle.

typedef struct zx_port_packet {
    uint64_t key;
    uint32_t type;
    zx_status_t status;
    union {
        zx_packet_user_t user;
        zx_packet_signal_t signal;
    };
} zx_port_packet_t;

In packet type should be ZX_PKT_TYPE_USER and only the user union element is considered valid:

typedef union zx_packet_user {
    uint64_t u64[4];
    uint32_t u32[8];
    uint16_t u16[16];
    uint8_t   c8[32];
} zx_packet_user_t;

RIGHTS

handle must be of type ZX_OBJ_TYPE_PORT and have ZX_RIGHT_WRITE.

RETURN VALUE

zx_port_queue() returns ZX_OK on successful queue of a packet.

ERRORS

ZX_ERR_BAD_HANDLE handle isn't a valid handle

ZX_ERR_INVALID_ARGS packet is an invalid pointer.

ZX_ERR_WRONG_TYPE handle is not a port handle.

ZX_ERR_ACCESS_DENIED handle does not have ZX_RIGHT_WRITE.

ZX_ERR_SHOULD_WAIT the port has too many pending packets. See Full Port Queue.

NOTES

The queue is drained by calling zx_port_wait().

Full Port Queue

zx_port_queue() may return ZX_ERR_SHOULD_WAIT indicating that there is no more space available in the queue for new port packets. It is guaranteed that there are packets in the queue available for reading when this occurs. Calling code should arrange to read packets from the queue until at least one ZX_PKT_TYPE_USER packet has been removed from the queue before attempting to enqueue another packet.

SEE ALSO