| # zx_socket_read | |
| ## NAME | |
| <!-- Updated by update-docs-from-fidl, do not edit. --> | |
| Read data from a socket. | |
| ## SYNOPSIS | |
| <!-- Updated by update-docs-from-fidl, do not edit. --> | |
| ```c | |
| #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); | |
| ``` | |
| ## DESCRIPTION | |
| `zx_socket_read()` attempts to read *buffer_size* bytes into *buffer*. If | |
| successful, the number of bytes actually read are return via | |
| *actual*. | |
| If a NULL *actual* is passed in, it will be ignored. | |
| If the socket was created with **ZX_SOCKET_DATAGRAM**, this syscall reads | |
| only the first available datagram in the socket (if one is present). | |
| If *buffer* is too small for the datagram, then the read will be | |
| truncated, and any remaining bytes in the datagram will be discarded. | |
| Supported *options* are: | |
| * **ZX_SOCKET_PEEK** to leave the message in the socket. | |
| To determine how many bytes are available to read, use the **rx_buf_available** | |
| field of the resulting `zx_info_socket_t`, which you can obtain using the | |
| **ZX_INFO_SOCKET** topic for [`zx_object_get_info()`]. | |
| ## RIGHTS | |
| <!-- Updated by update-docs-from-fidl, do not edit. --> | |
| *handle* must be of type **ZX_OBJ_TYPE_SOCKET** and have **ZX_RIGHT_READ**. | |
| ## RETURN VALUE | |
| `zx_socket_read()` returns **ZX_OK** on success, and writes into | |
| *actual* (if non-NULL) the exact number of bytes read. | |
| ## ERRORS | |
| **ZX_ERR_BAD_HANDLE** *handle* is not a valid handle. | |
| **ZX_ERR_BAD_STATE** reading has been disabled for this socket endpoint via [`zx_socket_shutdown()`]. | |
| **ZX_ERR_WRONG_TYPE** *handle* is not a socket handle. | |
| **ZX_ERR_INVALID_ARGS** If any of *buffer* or *actual* are non-NULL | |
| but invalid pointers, or if *buffer* is NULL, or if *options* is zero. | |
| **ZX_ERR_ACCESS_DENIED** *handle* does not have **ZX_RIGHT_READ**. | |
| **ZX_ERR_SHOULD_WAIT** The socket contained no data to read. | |
| **ZX_ERR_PEER_CLOSED** The other side of the socket is closed and no data is | |
| readable. | |
| ## SEE ALSO | |
| - [`zx_socket_create()`] | |
| - [`zx_socket_shutdown()`] | |
| - [`zx_socket_write()`] | |
| <!-- References updated by update-docs-from-fidl, do not edit. --> | |
| [`zx_object_get_info()`]: object_get_info.md | |
| [`zx_socket_create()`]: socket_create.md | |
| [`zx_socket_shutdown()`]: socket_shutdown.md | |
| [`zx_socket_write()`]: socket_write.md |