zx_socket_read

摘要

從通訊端讀取資料。

宣告

#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 如果任何 bufferactual 為非空值 但無效的指標、buffer 為 NULL,或options 為零。

ZX_ERR_ACCESS_DENIED 帳號代碼沒有 ZX_RIGHT_READ

ZX_ERR_SHOULD_WAIT 通訊端沒有可讀取的資料。

ZX_ERR_PEER_CLOSED 通訊端的另一端已關閉,因此無資料 。

另請參閱