sig
  type t
  val create :
    ?logfun:logfun ->
    ?now:(unit -> Core.Std.Time.t) ->
    ?enforce_unique_remote_name:bool ->
    ?is_client_ip_authorized:(string -> bool) ->
    ?warn_when_free_connections_lte_pct:float ->
    ?max_clients:int -> listen_port:int -> My_name.t -> t Import.Deferred.t
  val port : t -> int
  val close : t -> Remote_name.t -> unit
  val listen : t -> (Remote_name.t, Recv.t) Server_msg.t Import.Stream.t
  val listen_ignore_errors :
    ?stop:unit Import.Deferred.t -> t -> Recv.t Import.Stream.t
  val send :
    t ->
    Remote_name.t ->
    Send.t -> [ `Dropped | `Sent of Core.Std.Time.t ] Import.Deferred.t
  val send_ignore_errors : t -> Remote_name.t -> Send.t -> unit
  val send_to_all :
    t -> Send.t -> [ `Dropped | `Partial_success | `Sent ] Import.Deferred.t
  val send_to_all_ignore_errors : t -> Send.t -> unit
  val flushed :
    t ->
    cutoff:unit Import.Deferred.t ->
    ([ `Flushed of Remote_name.t list ] *
     [ `Not_flushed of Remote_name.t list ])
    Import.Deferred.t
  val invariant : t -> unit
end