摘要
將資料寫入通訊端。
宣告
#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 位元組寫入通訊端
帳號代碼。如果 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:
實際。嘗試寫入超過 Datagram 通訊端的封包
將會失敗 ZX_ERR_OUT_OF_RANGE
。
權限
handle 必須是 ZX_OBJ_TYPE_SOCKET
類型,且包含 ZX_RIGHT_WRITE
。
傳回值
zx_socket_write()
會在成功時傳回 ZX_OK
。
錯誤
ZX_ERR_BAD_HANDLE
帳號代碼不是有效的帳號代碼。
已透過下列方式,停用這個通訊端端點的ZX_ERR_BAD_STATE
寫入功能
zx_socket_set_disposition()
。
ZX_ERR_WRONG_TYPE
處理常式不是通訊端控制代碼。
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
因記憶體不足而失敗。
使用者空間無法妥善處理這種 (異常) 錯誤。
在日後的版本中不會再發生這個錯誤。