zx_port_queue


英文原文快照


名称

port_queue —— 将数据包排队到端口

概要

  1. #include <zircon/syscalls.h>
  2. #include <zircon/syscalls/port.h>
  3. zx_status_t zx_port_queue(zx_handle_t handle, const zx_port_packet_t* packet);

描述

port_queue()packet数据包排队到handle指定的端口。

  1. typedef struct zx_port_packet {
  2. uint64_t key;
  3. uint32_t type;
  4. int32_t status;
  5. union {
  6. zx_packet_user_t user;
  7. zx_packet_signal_t signal;
  8. };
  9. } zx_port_packet_t;

packet结构体中的type字段必须是ZX_PKT_TYPE_USER,并且联合字段中只有user是有效的:

  1. typedef union zx_packet_user {
  2. uint64_t u64[4];
  3. uint32_t u32[8];
  4. uint16_t u16[16];
  5. uint8_t c8[32];
  6. } zx_packet_user_t;

权限

TODO(ZX-2399)

返回值

port_queue() 数据包成功排队则返回ZX_OK

错误码

ZX_ERR_BAD_HANDLEhandle是无效句柄。

ZX_ERR_INVALID_ARGSpacket是无效指针。

ZX_ERR_WRONG_TYPEhandle不是端口类型句柄。

ZX_ERR_ACCESS_DENIEDhandle没有ZX_RIGHT_WRITE权限。

ZX_ERR_SHOULD_WAIT:端口有太多待处理的数据包,只有线程排空一些数据包后,后续的port_queue() 调用才可能会成功。

注释

通过调用port_wait() 来排空队列。

另见

port_createport_wait