sig
  type socket =
      [ `Connect_addr of Unix.sockaddr * Hydro_types.transport_protocol_type
      | `Connect_inet of string * int * Hydro_types.transport_protocol_type
      | `Descriptor of unit -> Hydro_types.descriptor
      | `Unconnected_datagram of Unix.socket_domain ]
  type connection =
      < ctrl : Hydro_transport.hydro_multiplex_controller;
        shutdown : unit -> unit >
  class type mplex_config =
    object
      method multiplexing :
        Hydro_types.descriptor ->
        Unixqueue.event_system ->
        Hydro_client_connector.connection Uq_engines.engine
    end
  val default_mplex_config : Hydro_client_connector.mplex_config
  class default_mplex_config : mplex_config
  type connector =
      [ `Mplex_controller of Hydro_transport.hydro_multiplex_controller
      | `Mplex_socket of
          Hydro_client_connector.socket * Hydro_client_connector.mplex_config
      | `Proxy_endpoint of
          Hydro_types.endpoint * Hydro_types.network_port option ]
  val connect_engine :
    Hydro_client_connector.connector ->
    Unixqueue.event_system ->
    Hydro_client_connector.connection Uq_engines.engine
  val register_endpoint_type :
    Hydro_types.endpoint_type ->
    (Hydro_types.endpoint ->
     Hydro_types.network_port option ->
     Hydro_client_connector.socket * Hydro_client_connector.mplex_config) ->
    Hydro_types.proxy_mode list -> unit
  val proxy_supports_endpoint_type :
    Hydro_types.endpoint_type -> Hydro_types.proxy_mode -> bool
end