socket_read - read data from a socket
#include <magenta/syscalls.h>
mx_status_t mx_socket_read(mx_handle_t handle, uint32_t options,
void* buffer, size_t size,
size_t* actual) {
socket_read() attempts to read size bytes into buffer. If successful, the number of bytes actually read are return via actual.
If a NULL buffer and 0 size are passed in, then this syscall instead requests that the number of outstanding bytes to be returned via actual.
If a NULL actual is passed in, it will be ignored.
If the socket was created with MX_SOCKET_DATAGRAM and buffer is too small for the packet, then the packet will be truncated, and any remaining bytes in the packet are discarded.
If options is set to MX_SOCKET_CONTROL, then socket_read() attempts to read from the socket control plane.
socket_read() returns MX_OK on success, and writes into actual (if non-NULL) the exact number of bytes read.
MX_ERR_BAD_HANDLE handle is not a valid handle.
MX_ERR_BAD_STATE options includes MX_SOCKET_CONTROL and the socket was not created with MX_SOCKET_HAS_CONTROL.
MX_ERR_WRONG_TYPE handle is not a socket handle.
MX_ERR_INVALID_ARGS If any of buffer or actual are non-NULL but invalid pointers, or if buffer is NULL but size is positive, or if options is not either zero or *MX_SOCKET_CONTROL.
MX_ERR_ACCESS_DENIED handle does not have MX_RIGHT_READ.
MX_ERR_SHOULD_WAIT The socket contained no data to read.
MX_ERR_PEER_CLOSED The other side of the socket is closed and no data is readable.
MX_ERR_BAD_STATE Reading has been disabled for this socket endpoint.
MX_ERR_NO_MEMORY (Temporary) Failure due to lack of memory.