zx_socket_read

摘要

从套接字读取数据。

声明

#include <zircon/syscalls.h>

zx_status_t zx_socket_read(zx_handle_t handle,
                           uint32_t options,
                           void* buffer,
                           size_t buffer_size,
                           size_t* actual);

说明

zx_socket_read() 尝试将 buffer_size 字节读取到buffer。如果 成功读取的字节数 actual

如果传入 NULL actual,则将忽略它。

如果套接字是使用 ZX_SOCKET_DATAGRAM 创建的,此系统调用会读取 只有套接字中第一个可用的数据报(如果存在)。 如果缓冲区对数据报而言过小,则读取操作 截断,数据报中的所有剩余字节都将被舍弃。

支持的选项包括:

  • ZX_SOCKET_PEEK:用于将消息保留在套接字中。

如需确定可供读取的字节数,请使用 rx_buf_available 字段,您可以使用zx_info_socket_t zx_object_get_info()ZX_INFO_SOCKET主题。

权限

handle 的类型必须为 ZX_OBJ_TYPE_SOCKET 且包含 ZX_RIGHT_READ

返回值

zx_socket_read() 会在成功时返回 ZX_OK,并写入 actual(如果为非 NULL)读取的确切字节数。

错误

ZX_ERR_BAD_HANDLE handle 不是有效的句柄。

已通过以下方式禁止将 ZX_ERR_BAD_STATE 写入 handle 的对等方 zx_socket_set_disposition()标识名中没有任何待处理的数据。

ZX_ERR_WRONG_TYPE handle 不是套接字句柄。

ZX_ERR_INVALID_ARGS 如果 bufferactual 中的任何一个为非 NULL 但存在无效的指针,或者如果 buffer 为 NULL,或 options 为零。

ZX_ERR_ACCESS_DENIED 句柄没有 ZX_RIGHT_READ

ZX_ERR_SHOULD_WAIT。套接字未包含要读取的数据。

ZX_ERR_PEER_CLOSED 套接字的另一端关闭,无数据 可读性。

另请参阅