zx_port_queue
名称
port_queue —— 将数据包排队到端口
概要
#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);
描述
port_queue() 将packet数据包排队到handle指定的端口。
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;
packet结构体中的type字段必须是ZX_PKT_TYPE_USER,并且联合字段中只有user是有效的:
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;
权限
TODO(ZX-2399)
返回值
port_queue() 数据包成功排队则返回ZX_OK。
错误码
ZX_ERR_BAD_HANDLE:handle是无效句柄。
ZX_ERR_INVALID_ARGS:packet是无效指针。
ZX_ERR_WRONG_TYPE:handle不是端口类型句柄。
ZX_ERR_ACCESS_DENIED:handle没有ZX_RIGHT_WRITE权限。
ZX_ERR_SHOULD_WAIT:端口有太多待处理的数据包,只有线程排空一些数据包后,后续的port_queue() 调用才可能会成功。
注释
通过调用port_wait() 来排空队列。