module type Binable_t = sig .. end
type t
include Core.Std.Binable with type t := t
include Core.Std.Sexpable with type t := t
module type Arg = sig .. end
module Client_message : sig .. end
type t
include Core.Std.Sexpable with type t := t
module Server_message : sig .. end
type t
include Core.Std.Sexpable with type t := t
module Transport : sig .. end
type t
val create : Import.Reader.t -> Import.Writer.t -> t Import.Deferred.t
val close : t -> unit Import.Deferred.t
val read : t -> [ `Eof | `Ok of Client_message.t ] Import.Deferred.t
val write : t -> Server_message.t -> unit
val flushed_time : t -> Core.Std.Time.t Import.Deferred.t
module type S = sig .. end
module Client_message : sig .. end
type t
module Server_message : sig .. end
type t
module Client_id : Core.Std.Unique_id
module Server_read_result : sig .. end
type t = 
|Connect of Client_id.t
|Disconnect of Client_id.t * Core.Std.Sexp.t
|Denied_access of string
|Data of Client_id.t * Client_message.t
include Core.Std.Sexpable with type t := t
type t
val create : ?max_pending_connections:int ->
?verbose:bool ->
?log_disconnects:bool ->
?buffer_age_limit:[ `At_most of Core.Std.Time.Span.t | `Unlimited ] ->
port:int ->
auth:(Import.Unix.Inet_addr.t ->
      int -> [ `Allow | `Deny of string option ] Import.Deferred.t) ->
unit -> t Import.Deferred.t
val listen : t -> Server_read_result.t Import.Pipe.Reader.t
val listen_ignore_errors : t -> (Client_id.t * Client_message.t) Import.Pipe.Reader.t
val close : t -> Client_id.t -> unit
val flushed_time : t ->
Client_id.t ->
[ `Client_not_found | `Flushed of Core.Std.Time.t Import.Deferred.t ]
val has_client_id : t -> Client_id.t -> bool
val send : t ->
Client_id.t ->
Server_message.t ->
[ `Drop of exn | `Sent of Core.Std.Time.t ] Import.Deferred.t
val send_ignore_errors : t -> Client_id.t -> Server_message.t -> unit
val send_to_all : t -> Server_message.t -> unit
val client_addr_port : t -> Client_id.t -> (Import.Unix.Inet_addr.t * int) option
val port : t -> int