.. _envoy_v3_api_file_envoy/config/core/v3/socket_option.proto:

Socket option (proto)
=====================






.. _envoy_v3_api_msg_config.core.v3.SocketOption:

config.core.v3.SocketOption
---------------------------


:repo:`[config.core.v3.SocketOption proto] <api/envoy/config/core/v3/socket_option.proto#L39>`

Generic socket option message. This would be used to set socket options that
might not exist in upstream kernels or precompiled Envoy binaries.

For example:

.. code-block:: json

 {
   "description": "support tcp keep alive",
   "state": 0,
   "level": 1,
   "name": 9,
   "int_value": 1,
 }

1 means SOL_SOCKET and 9 means SO_KEEPALIVE on Linux.
With the above configuration, `TCP Keep-Alives <https://www.freesoft.org/CIE/RFC/1122/114.htm>`_
can be enabled in socket with Linux, which can be used in
:ref:`listener's<envoy_v3_api_field_config.listener.v3.Listener.socket_options>` or
:ref:`admin's <envoy_v3_api_field_config.bootstrap.v3.Admin.socket_options>` socket_options etc.

It should be noted that the name or level may have different values on different platforms.



.. code-block:: json
  :force:

  {
    "description": ...,
    "level": ...,
    "name": ...,
    "int_value": ...,
    "buf_value": ...,
    "state": ...
  }

.. _envoy_v3_api_field_config.core.v3.SocketOption.description:


description
  (`string <https://developers.google.com/protocol-buffers/docs/proto#scalar>`_) An optional name to give this socket option for debugging, etc.
  Uniqueness is not required and no special meaning is assumed.


.. _envoy_v3_api_field_config.core.v3.SocketOption.level:


level
  (`int64 <https://developers.google.com/protocol-buffers/docs/proto#scalar>`_) Corresponding to the level value passed to setsockopt, such as IPPROTO_TCP


.. _envoy_v3_api_field_config.core.v3.SocketOption.name:


name
  (`int64 <https://developers.google.com/protocol-buffers/docs/proto#scalar>`_) The numeric name as passed to setsockopt


.. _envoy_v3_api_field_config.core.v3.SocketOption.int_value:


int_value
  (`int64 <https://developers.google.com/protocol-buffers/docs/proto#scalar>`_) Because many sockopts take an int value.


  

  Precisely one of :ref:`int_value <envoy_v3_api_field_config.core.v3.SocketOption.int_value>`, :ref:`buf_value <envoy_v3_api_field_config.core.v3.SocketOption.buf_value>` must be set.

.. _envoy_v3_api_field_config.core.v3.SocketOption.buf_value:


buf_value
  (`bytes <https://developers.google.com/protocol-buffers/docs/proto#scalar>`_) Otherwise it's a byte buffer.


  

  Precisely one of :ref:`int_value <envoy_v3_api_field_config.core.v3.SocketOption.int_value>`, :ref:`buf_value <envoy_v3_api_field_config.core.v3.SocketOption.buf_value>` must be set.

.. _envoy_v3_api_field_config.core.v3.SocketOption.state:


state
  (:ref:`config.core.v3.SocketOption.SocketState <envoy_v3_api_enum_config.core.v3.SocketOption.SocketState>`) The state in which the option will be applied. When used in BindConfig
  STATE_PREBIND is currently the only valid value.


.. _envoy_v3_api_enum_config.core.v3.SocketOption.SocketState:

Enum config.core.v3.SocketOption.SocketState
--------------------------------------------


:repo:`[config.core.v3.SocketOption.SocketState proto] <api/envoy/config/core/v3/socket_option.proto#L42>`




.. _envoy_v3_api_enum_value_config.core.v3.SocketOption.SocketState.STATE_PREBIND:


STATE_PREBIND
  *(DEFAULT)* ⁣Socket options are applied after socket creation but before binding the socket to a port


.. _envoy_v3_api_enum_value_config.core.v3.SocketOption.SocketState.STATE_BOUND:


STATE_BOUND
  ⁣Socket options are applied after binding the socket to a port but before calling listen()


.. _envoy_v3_api_enum_value_config.core.v3.SocketOption.SocketState.STATE_LISTENING:


STATE_LISTENING
  ⁣Socket options are applied after calling listen()




.. _envoy_v3_api_msg_config.core.v3.SocketOptionsOverride:

config.core.v3.SocketOptionsOverride
------------------------------------


:repo:`[config.core.v3.SocketOptionsOverride proto] <api/envoy/config/core/v3/socket_option.proto#L78>`




.. code-block:: json
  :force:

  {
    "socket_options": []
  }

.. _envoy_v3_api_field_config.core.v3.SocketOptionsOverride.socket_options:


socket_options
  (**repeated** :ref:`config.core.v3.SocketOption <envoy_v3_api_msg_config.core.v3.SocketOption>`)