摘要
从套接字读取数据。
声明
#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
如果 buffer 或 actual 中的任何一个为非 NULL
但存在无效的指针,或者如果 buffer 为 NULL,或 options 为零。
ZX_ERR_ACCESS_DENIED
句柄没有 ZX_RIGHT_READ
。
ZX_ERR_SHOULD_WAIT
。套接字未包含要读取的数据。
ZX_ERR_PEER_CLOSED
套接字的另一端关闭,无数据
可读性。