blob: cac613116a2735e921d9a5160f797f96865dfdf3 [file] [log] [blame] [view]
# zx_socket_set_disposition
## NAME
<!-- Contents of this heading updated by update-docs-from-fidl, do not edit. -->
Set disposition of writes.
## SYNOPSIS
<!-- Contents of this heading updated by update-docs-from-fidl, do not edit. -->
```c
#include <zircon/syscalls.h>
zx_status_t zx_socket_set_disposition(zx_handle_t handle,
uint32_t disposition,
uint32_t disposition_peer);
```
## DESCRIPTION
`zx_socket_set_disposition` sets the disposition of
[`zx_socket_write()`] calls for a socket handle and its peer.
Valid disposition flags that can be used:
**ZX_SOCKET_DISPOSITION_WRITE_DISABLED** - Disable writes for the specified
socket endpoint. Once set, writes to the specified socket endpoint will fail
with **ZX_ERR_BAD_STATE**. Reads from the specified socket endpoint will
succeed until all data buffered in the specified socket endpoint is consumed,
and fail with **ZX_ERR_BAD_STATE** thereafter.
**ZX_SOCKET_DISPOSITION_WRITE_ENABLED** - Enable writes for the specified
socket endpoint. Once set, writes to and reads from the specified socket
endpoint will behave as specified in [`zx_socket_write()`] and
[`zx_socket_read()`], respectively.
It is invalid to specify **ZX_SOCKET_DISPOSITION_WRITE_ENABLED** on a socket
endpoint that has buffered data; doing so will result in
`zx_socket_set_disposition` returning **ZX_ERR_BAD_STATE** and no action being
taken.
It is invalid to specify both **ZX_SOCKET_DISPOSITION_WRITE_DISABLED** and
**ZX_SOCKET_DISPOSITION_WRITE_ENABLED** in *disposition* or *disposition_peer*;
doing so will result in `zx_socket_set_disposition` returning
**ZX_ERR_INVALID_ARGS** and no action being taken.
## RIGHTS
<!-- Contents of this heading updated by update-docs-from-fidl, do not edit. -->
*handle* must be of type **ZX_OBJ_TYPE_SOCKET** and have **ZX_RIGHT_MANAGE_SOCKET**.
## RETURN VALUE
`zx_socket_set_disposition()` returns **ZX_OK** on success.
## ERRORS
**ZX_ERR_BAD_HANDLE** *handle* is not a valid handle.
**ZX_ERR_BAD_STATE** *disposition* or *disposition_peer* contains
**ZX_SOCKET_DISPOSITION_WRITE_ENABLED** and *handle* refers to a socket with
buffered data on the specified socket endpoint.
**ZX_ERR_WRONG_TYPE** *handle* is not a socket handle.
**ZX_ERR_ACCESS_DENIED** *handle* does not have **ZX_RIGHT_MANAGE_SOCKET**.
**ZX_ERR_INVALID_ARGS** *disposition* or *disposition_peer* contains flags
outside of the ones listed above or an invalid combination of flags.
## SEE ALSO
- [`zx_socket_create()`]
- [`zx_socket_read()`]
- [`zx_socket_write()`]
<!-- References updated by update-docs-from-fidl, do not edit. -->
[`zx_socket_create()`]: socket_create.md
[`zx_socket_read()`]: socket_read.md
[`zx_socket_write()`]: socket_write.md