zx_socket_read
名称
socket_read —— 从socket中读取数据
概要
#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) {
描述
socket_read() 尝试读取buffer_size个字节数据到buffer中。如果读取成功,则实际读取的字节数将通过actual返回。
如果传入buffer的是NULL,并且buffer_size为0,则此系统调用会请求未完成字节数,并通过actual返回。
如果传入actual的值为NULL,那么它将会被忽略。
如果socket是使用ZX_SOCKET_DATAGRAM标志位创建的,则此系统调用仅读取socket中的第一个可用数据报(如果存在的话)。如果缓冲区对于数据报来说太小,则读取将被截断,并且数据报中的任何剩余字节将被丢弃。
如果options设置了ZX_SOCKET_CONTROL标志位,则socket_read() 将尝试从socket控制面中读取。
权限
TODO(ZX-2399)
返回值
socket_read() 执行成功则返回ZX_OK,并将准确的读取字节数写入actual(如果它非NULL)中。
错误码
ZX_ERR_BAD_HANDLE:handle是无效句柄。
ZX_ERR_BAD_STATE:options包含ZX_SOCKET_CONTROL标志位,但该socket不是由ZX_SOCKET_HAS_CONTROL创建的。
ZX_ERR_WRONG_TYPE:handle不是socket类型句柄。
ZX_ERR_INVALID_ARGS:buffer或actual中的任何一个是非NULL但无效指针;或buffer为NULL但size为正;或options不是0或ZX_SOCKET_CONTROL。
ZX_ERR_ACCESS_DENIED:handle不具有ZX_RIGHT_READ权限。
ZX_ERR_SHOULD_WAIT:socket没有数据可读。
ZX_ERR_PEER_CLOSED:socket的相对端点已关闭,并且没有数据可读。
ZX_ERR_BAD_STATE:已禁用通过此socket端点读取数据。