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