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 创建的,此系统调用仅读取套接字中第一个可用的数据报(如果存在)。如果 buffer 对于数据报太小,则读取将被截断,并且数据报中的任何剩余字节都将被舍弃。

支持的选项包括:

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

如需确定可读取的字节数,请使用生成的 zx_info_socket_trx_buf_available 字段(您可以使用 zx_object_get_info()ZX_INFO_SOCKET 主题获取该字段)。

权限

handle 必须为 ZX_OBJ_TYPE_SOCKET 类型,且具有 ZX_RIGHT_READ

返回值

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

错误

ZX_ERR_BAD_HANDLE 句柄不是有效的句柄。

handle 的对等方的 ZX_ERR_BAD_STATE 写入操作已通过 zx_socket_set_disposition() 停用,并且 handle 上没有剩余的待处理数据。

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 套接字的另一端已关闭,无法读取任何数据。

另请参阅