摘要
将数据写入套接字。
声明
#include <zircon/syscalls.h>
zx_status_t zx_socket_write(zx_handle_t handle,
uint32_t options,
const void* buffer,
size_t buffer_size,
size_t* actual);
说明
zx_socket_write()
尝试向套接字写入 buffer_size 字节
由 handle 指定。如果 buffer_size 为 ,则指向 bytes 的指针可能为 NULL
零。
如果传入 NULL actual,则将忽略它。
如果 ZX_SOCKET_STREAM
套接字写入中没有
所有缓冲区都有足够的空间。如果写入了非零数据量,
套接字,通过 actual 返回写入的数量,并且调用成功。
否则,如果套接字已满,调用将返回
ZX_ERR_SHOULD_WAIT
,并且客户端应等待(例如,
zx_object_wait_one()
或 zx_object_wait_async()
)。
ZX_SOCKET_DATAGRAM
套接字写入永不短时间。如果套接字具有
缓冲区空间不足,则不会写入任何内容并返回
ZX_ERR_SHOULD_WAIT
。如果写入成功,系统会通过以下方法返回 buffer_size:
actual。尝试写入的数据包大于数据报套接字的
容量将失败并显示 ZX_ERR_OUT_OF_RANGE
。
权限
handle 的类型必须为 ZX_OBJ_TYPE_SOCKET
且包含 ZX_RIGHT_WRITE
。
返回值
如果成功,zx_socket_write()
会返回 ZX_OK
。
错误
ZX_ERR_BAD_HANDLE
handle 不是有效的句柄。
已通过以下方式对此套接字端点停用 ZX_ERR_BAD_STATE
写入:
zx_socket_set_disposition()
。
ZX_ERR_WRONG_TYPE
handle 不是套接字句柄。
ZX_ERR_INVALID_ARGS
buffer 是无效的指针。
ZX_ERR_ACCESS_DENIED
句柄没有 ZX_RIGHT_WRITE
。
ZX_ERR_SHOULD_WAIT
:套接字的底层缓冲区已满。
ZX_ERR_OUT_OF_RANGE
:使用 ZX_SOCKET_DATAGRAM
创建套接字,
buffer 大于套接字中的剩余空间。
ZX_ERR_PEER_CLOSED
插座的另一端是关闭的。
ZX_ERR_NO_MEMORY
因内存不足而失败。
用户空间没有好办法处理这种(不太可能)错误。
在将来的版本中,此错误不会再发生。