摘要
從通訊端讀取資料。
宣告
#include <zircon/syscalls.h>
zx_status_t zx_socket_read(zx_handle_t handle,
uint32_t options,
void* buffer,
size_t buffer_size,
size_t* actual);
說明
zx_socket_read()
會嘗試將 buffer_size 位元組讀取到 buffer。如果
因此,實際讀取的位元組數
實際。
如果傳入 NULL actual,系統就會忽略該參數。
如果通訊端是透過 ZX_SOCKET_DATAGRAM
建立,則此 Syscall 會讀取
通訊端中第一個可用的資料元 (如果有的話)。
如果 buffer 太小,不適用於資料元,那麼讀取作業會
並捨棄資料圖表中剩餘的位元組。
支援的選項如下:
ZX_SOCKET_PEEK
,可將訊息留在通訊端中。
如要判斷可以讀取多少位元組,請使用 rx_buf_available
所產生 zx_info_socket_t
的子欄位,您可以使用
「zx_object_get_info()
」的ZX_INFO_SOCKET
主題。
權限
handle 必須是 ZX_OBJ_TYPE_SOCKET
類型,且包含 ZX_RIGHT_READ
。
傳回值
zx_socket_read()
會在成功時傳回 ZX_OK
,並將寫入
「actual」 (非空值) 的確切讀取位元組數。
錯誤
ZX_ERR_BAD_HANDLE
帳號代碼不是有效的帳號代碼。
已停用 ZX_ERR_BAD_STATE
寫入帳號代碼對等點的功能
zx_socket_set_disposition()
,控制代碼中也沒有任何待處理的資料。
ZX_ERR_WRONG_TYPE
處理常式不是通訊端控制代碼。
ZX_ERR_INVALID_ARGS
如果任何 buffer 或 actual 為非空值
但無效的指標、buffer 為 NULL,或options 為零。
ZX_ERR_ACCESS_DENIED
帳號代碼沒有 ZX_RIGHT_READ
。
ZX_ERR_SHOULD_WAIT
通訊端沒有可讀取的資料。
ZX_ERR_PEER_CLOSED
通訊端的另一端已關閉,因此無資料
。