sig
  type t
  val create :
    ?logfun:Versioned_typed_tcp.S.logfun ->
    ?now:(unit -> Core.Std.Time.t) ->
    ?check_remote_name:bool ->
    ip:string ->
    port:int ->
    expected_remote_name:Remote_name.t ->
    My_name.t -> Versioned_typed_tcp.S.Client.t Import.Deferred.t
  val connect : Versioned_typed_tcp.S.Client.t -> unit Import.Deferred.t
  val close_connection : Versioned_typed_tcp.S.Client.t -> unit
  val listen :
    Versioned_typed_tcp.S.Client.t ->
    (Remote_name.t, Recv.t) Versioned_typed_tcp.Client_msg.t Import.Stream.t
  val listen_ignore_errors :
    ?stop:unit Import.Deferred.t ->
    Versioned_typed_tcp.S.Client.t -> Recv.t Import.Stream.t
  val send :
    Versioned_typed_tcp.S.Client.t ->
    Send.t -> [ `Dropped | `Sent of Core.Std.Time.t ] Import.Deferred.t
  val send_ignore_errors : Versioned_typed_tcp.S.Client.t -> Send.t -> unit
  val state :
    Versioned_typed_tcp.S.Client.t ->
    [ `Connected | `Connecting | `Disconnected ]
  val last_connect_error : Versioned_typed_tcp.S.Client.t -> exn option
end