摘要
從通訊端讀取資料。
宣告
#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 通訊端的另一端已關閉,因此無資料
。