| .. _socks5_interface: |
| |
| SOCKS5 Proxy Support |
| #################### |
| |
| .. contents:: |
| :local: |
| :depth: 2 |
| |
| Overview |
| ******** |
| |
| The SOCKS library implements SOCKS5 support, which allows Zephyr to connect |
| to peer devices via a network proxy. |
| |
| See this |
| `SOCKS5 Wikipedia article <https://en.wikipedia.org/wiki/SOCKS#SOCKS5>`_ |
| for a detailed overview of how SOCKS5 works. |
| |
| For more information about the protocol itself, see |
| `IETF RFC1928 SOCKS Protocol Version 5 <https://tools.ietf.org/html/rfc1928>`_. |
| |
| SOCKS5 API |
| ********** |
| |
| The SOCKS5 support is enabled by :kconfig:option:`CONFIG_SOCKS` Kconfig variable. |
| Application wanting to use the SOCKS5 must set the SOCKS5 proxy host address |
| by calling :c:func:`setsockopt()` like this: |
| |
| .. code-block:: c |
| |
| static int set_proxy(int sock, const struct sockaddr *proxy_addr, |
| socklen_t proxy_addrlen) |
| { |
| int ret; |
| |
| ret = setsockopt(sock, SOL_SOCKET, SO_SOCKS5, |
| proxy_addr, proxy_addrlen); |
| if (ret < 0) { |
| return -errno; |
| } |
| |
| return 0; |
| } |
| |
| SOCKS5 Proxy Usage in MQTT |
| ************************** |
| |
| For MQTT client, there is :c:func:`mqtt_client_set_proxy()` API that the |
| application can call to setup SOCKS5 proxy. See :ref:`mqtt-publisher-sample` |
| for usage example. |