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