zx_socket_read


英文原文快照


名称

socket_read —— 从socket中读取数据

概要

  1. #include <zircon/syscalls.h>
  2. zx_status_t zx_socket_read(zx_handle_t handle, uint32_t options,
  3. void* buffer, size_t buffer_size,
  4. 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_HANDLEhandle是无效句柄。

ZX_ERR_BAD_STATEoptions包含ZX_SOCKET_CONTROL标志位,但该socket不是由ZX_SOCKET_HAS_CONTROL创建的。

ZX_ERR_WRONG_TYPEhandle不是socket类型句柄。

ZX_ERR_INVALID_ARGSbufferactual中的任何一个是非NULL但无效指针;或buffer为NULL但size为正;或options不是0或ZX_SOCKET_CONTROL

ZX_ERR_ACCESS_DENIEDhandle不具有ZX_RIGHT_READ权限。

ZX_ERR_SHOULD_WAIT:socket没有数据可读。

ZX_ERR_PEER_CLOSED:socket的相对端点已关闭,并且没有数据可读。

ZX_ERR_BAD_STATE:已禁用通过此socket端点读取数据。

另见

socket_createsocket_write