module Uq_socks5

: sig

This module implements a SOCKS version 5 client (see RFC 1928) for use with the Uq_engines.connector, Uq_engines.listener, and Uq_engines.datagram_provider engine factories.

This implementation supports IPv4 and IPv6.

exception Socks_error of string

Raised when error messages of the SOCKS proxy are received, or because of other SOCKS-related problems.

class proxy_client : Uq_engines.connect_address ->

The object created by new proxy_client addr can be passed as proxy to the Uq_engines.connector, Uq_engines.listener, and Uq_engines.datagram_provider functions to use the SOCKS proxy for connections, servers, and datagram socket, respectively.

The SOCKS client supports the following methods:

  • connect: Only TCP connections are supported (UDP could be made working - TODO)
  • listen: This works (only) for TCP sockets, too
  • create_datagram_socket: Creates unconnected datagram sockets that can be sent and received with object methods

Note that socket addresses are resolved by the proxy host; this applies to both `Sock_inet and `Sock_inet_byname. For the latter this means that name resolution is done by the proxy.

The nature of SOCKS restricts the functionality:

  • `Sock_unix addresses are not supported (i.e. you cannot connect to a Unix domain socket on the proxy host)
  • Listening server sockets can only accept one connection; after that they are "dead" and must be shut down first. The method multiple_connections is false because of this.
  • Further restrictions can be enforced by the SOCKS proxy and its configuration.