blob: 72738674a91abe59317a1f296b874f2a5e95173f [file] [log] [blame] [view]
# Socket
## NAME
Socket - Bidirectional streaming IPC transport
## SYNOPSIS
Sockets are a bidirectional stream transport. Unlike channels, sockets
only move data (not handles).
## DESCRIPTION
Data is written into one end of a socket via [`zx_socket_write()`] and
read from the opposing end via [`zx_socket_read()`].
Upon creation, both ends of the socket are writable. Using the
[`zx_socket_set_disposition()`] system call, each end of the socket can be
enabled or disabled independently, using the
**ZX_SOCKET_DISPOSITION_WRITE_ENABLED** and
**ZX_SOCKET_DISPOSITION_WRITE_DISABLED**.
## PROPERTIES
The following properties may be queried from a socket object:
**ZX_PROP_SOCKET_RX_THRESHOLD** size of the read threshold of a socket, in
bytes. When the bytes queued on the socket (available for reading) is equal to
or greater than this value, the **ZX_SOCKET_READ_THRESHOLD** signal is asserted.
Read threshold signalling is disabled by default (and when set, writing
a value of 0 for this property disables it).
**ZX_PROP_SOCKET_TX_THRESHOLD** size of the write threshold of a socket,
in bytes. When the space available for writing on the socket is equal to or
greater than this value, the **ZX_SOCKET_WRITE_THRESHOLD** signal is asserted.
Write threshold signalling is disabled by default (and when set, writing a
value of 0 for this property disables it).
From the point of view of a socket handle, the receive buffer contains the data
that is readable via [`zx_socket_read()`] from that handle (having been written
from the opposing handle), and the transmit buffer contains the data that is
written via [`zx_socket_write()`] to that handle (and readable from the opposing
handle).
## SIGNALS
The following signals may be set for a socket object:
**ZX_SOCKET_READABLE** data is available to read from the socket
**ZX_SOCKET_WRITABLE** data may be written to the socket
**ZX_SOCKET_PEER_CLOSED** the other endpoint of this socket has
been closed.
**ZX_SOCKET_PEER_WRITE_DISABLED** writing is disabled for the other
endpoint because its disposition was set to
**ZX_SOCKET_DISPOSITION_WRITE_DISABLED**. Reads on a socket endpoint with this
signal raised will succeed so long as there is data in the socket that was
written before writing was disabled.
**ZX_SOCKET_WRITE_DISABLED** writing is disabled for this endpoint because its
disposition was set to **ZX_SOCKET_DISPOSITION_WRITE_DISABLED**. Writes on a
socket endpoint with this signal raised will fail.
**ZX_SOCKET_READ_THRESHOLD** data queued up on socket for reading exceeds
the read threshold.
**ZX_SOCKET_WRITE_THRESHOLD** space available on the socket for writing exceeds
the write threshold.
## SYSCALLS
- [`zx_socket_create()`] - create a new socket
- [`zx_socket_read()`] - read data from a socket
- [`zx_socket_set_disposition()`] - set disposition of a socket
- [`zx_socket_write()`] - write data to a socket
[`zx_socket_create()`]: /reference/syscalls/socket_create.md
[`zx_socket_read()`]: /reference/syscalls/socket_read.md
[`zx_socket_set_disposition()`]: /reference/syscalls/socket_set_disposition.md
[`zx_socket_write()`]: /reference/syscalls/socket_write.md