总结
从套接字中读取数据。
声明
#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_t
的 rx_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
:如果 buffer 或 actual 中的任意一个为非 NULL 但无效的指针,buffer 为 NULL,或 options 为零时。
ZX_ERR_ACCESS_DENIED
句柄没有 ZX_RIGHT_READ
。
ZX_ERR_SHOULD_WAIT
套接字中没有要读取的数据。
ZX_ERR_PEER_CLOSED
套接字的另一端已关闭,无法读取任何数据。