port_queue - queue a packet to an port
#include <zircon/syscalls.h>
#include <zircon/syscalls/port.h>
zx_status_t zx_port_queue(zx_handle_t handle, const void* packet, size_t size);
port_queue() queues a packet to the port specified by handle. The packet must be of type zx_port_packet and size should be set to zero.
typedef struct zx_port_packet {
uint64_t key;
uint32_t type;
int32_t status;
union {
zx_packet_user_t user;
zx_packet_signal_t signal;
};
} zx_port_packet_t;
In zx 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;
port_queue() returns ZX_OK on successful queue of a packet.
ZX_ERR_INVALID_ARGS handle isn't a valid port handle, or packet is an invalid pointer.
ZX_ERR_WRONG_TYPE size is not zero or handle is not a port handle.
ZX_ERR_ACCESS_DENIED handle does not have ZX_RIGHT_WRITE.
The queue is drained by calling port_wait().