摘要
將資料寫入通訊端。
宣告
#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「實際」,系統會忽略此值。
如果通訊端沒有足夠空間容納所有緩衝區,ZX_SOCKET_STREAM
通訊端寫入可能會變得很短。如果寫入通訊端的資料量非零,則會透過實際傳回的資料量,讓呼叫成功。否則,如果通訊端已滿,呼叫會傳回 ZX_ERR_SHOULD_WAIT
,而用戶端應等待 (例如使用 zx_object_wait_one()
或 zx_object_wait_async()
)。
ZX_SOCKET_DATAGRAM
通訊端寫入永不短。如果通訊端的緩衝區空間不足,則通訊端不會寫入任何內容,並傳回 ZX_ERR_SHOULD_WAIT
。如果寫入成功,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
處理常式不是通訊端控點。
ZX_ERR_INVALID_ARGS
緩衝區 是無效指標。
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
因記憶體不足而失敗。使用者空間無法以任何方式處理這個錯誤 (極可能) 錯誤。日後的建構作業不會再發生這個錯誤。