zx_socket_write

总结

将数据写入套接字。

声明

#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。如果写入成功,则通过 actual 返回 buffer_size。如果尝试写入的数据包大于数据报套接字容量,则会失败并显示 ZX_ERR_OUT_OF_RANGE

权限

handle 必须为 ZX_OBJ_TYPE_SOCKET 类型,且具有 ZX_RIGHT_WRITE

返回值

zx_socket_write() 会在成功时返回 ZX_OK

错误

ZX_ERR_BAD_HANDLE 句柄不是有效的句柄。

已通过 zx_socket_set_disposition() 禁止此套接字端点的 ZX_ERR_BAD_STATE 写入。

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 创建的,缓冲区大于套接字中的剩余空间。

ZX_ERR_PEER_CLOSED 套接字的另一端是关闭的。

ZX_ERR_NO_MEMORY 由于内存不足而失败。 用户空间没有什么方法来处理此(不太可能)错误。在以后的 build 中,此错误不会再发生。

另请参阅