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「實際」,系統會忽略此值。

如果通訊端是透過 ZX_SOCKET_DATAGRAM 建立,此 sys 呼叫只會讀取通訊端中的第一個可用的資料元 (如有)。如果資料元的 buffer 太小,系統會截斷讀取作業,並捨棄資料圖形中剩餘的所有位元組。

支援的選項如下:

  • ZX_SOCKET_PEEK:在通訊端中留下訊息。

如要判斷可以讀取的位元組數,請使用產生的 zx_info_socket_trx_buf_available 欄位 (您可以使用 zx_object_get_info()ZX_INFO_SOCKET 主題取得這項資訊)。

權限

handle 必須是 ZX_OBJ_TYPE_SOCKET 類型,且具有 ZX_RIGHT_READ

傳回值

zx_socket_read() 會在成功時傳回 ZX_OK,如為實際 (非 NULL) 讀取到確切讀取的位元組數。

錯誤

ZX_ERR_BAD_HANDLE 帳號代碼不是有效的帳號代碼。

已透過 zx_socket_set_disposition() 停用對處理常式的對等點的 ZX_ERR_BAD_STATE 寫入功能,處理常式上也沒有任何待處理的資料。

ZX_ERR_WRONG_TYPE 處理常式不是通訊端控點。

ZX_ERR_INVALID_ARGS 如果任何緩衝區實際為非 NULL,但無效指標、buffer 為 NULL,或者 options 為零。

ZX_ERR_ACCESS_DENIED 處理常式沒有 ZX_RIGHT_READ

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

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

另請參閱