sig
  module Address :
    sig
      type t = Unix.inet_addr * int
      val encode : NetTcp.Address.t -> Bencode.t
      val decode : Bencode.t -> NetTcp.Address.t
      val eq : NetTcp.Address.t -> NetTcp.Address.t -> bool
      val hash : NetTcp.Address.t -> int
      val with_port : NetTcp.Address.t -> int -> NetTcp.Address.t
      val local : int -> NetTcp.Address.t
      val by_addr : string -> int -> NetTcp.Address.t
      val by_name : string -> int -> NetTcp.Address.t option Lwt.t
      val fmt : Format.formatter -> NetTcp.Address.t -> unit
      val to_string : NetTcp.Address.t -> string
      module Tbl :
        sig
          type key = t
          type 'a t
          val create : int -> 'a t
          val clear : 'a t -> unit
          val reset : 'a t -> unit
          val copy : 'a t -> 'a t
          val add : 'a t -> key -> '-> unit
          val remove : 'a t -> key -> unit
          val find : 'a t -> key -> 'a
          val find_all : 'a t -> key -> 'a list
          val replace : 'a t -> key -> '-> unit
          val mem : 'a t -> key -> bool
          val iter : (key -> '-> unit) -> 'a t -> unit
          val fold : (key -> '-> '-> 'b) -> 'a t -> '-> 'b
          val length : 'a t -> int
          val stats : 'a t -> Hashtbl.statistics
        end
    end
  val call_in : float -> (unit -> unit) -> unit
  module Connection :
    sig
      type t
      val address : NetTcp.Connection.t -> NetTcp.Address.t
      val try_open : NetTcp.Address.t -> NetTcp.Connection.t option Lwt.t
      val close : NetTcp.Connection.t -> unit Lwt.t
      val is_closed : NetTcp.Connection.t -> bool
      val wait : NetTcp.Connection.t -> unit Lwt.t
      val finalize : NetTcp.Connection.t -> unit
      val send : NetTcp.Connection.t -> Bencode.t -> unit
      val events : NetTcp.Connection.t -> Bencode.t Signal.t
      val local : int -> NetTcp.Connection.t option Lwt.t
      val by_host : string -> int -> NetTcp.Connection.t option Lwt.t
      val by_name : string -> int -> NetTcp.Connection.t option Lwt.t
      val of_sock :
        Lwt_unix.file_descr -> NetTcp.Address.t -> NetTcp.Connection.t
    end
  module Server :
    sig
      type receive_ev
      val reply : NetTcp.Server.receive_ev -> Bencode.t -> unit
      val msg : NetTcp.Server.receive_ev -> Bencode.t
      val addr : NetTcp.Server.receive_ev -> NetTcp.Address.t
      type event = Receive of NetTcp.Server.receive_ev | Stop
      type t
      val events : NetTcp.Server.t -> NetTcp.Server.event Signal.t
      val create :
        ?retry:int ->
        ?port:int -> ?log:bool -> unit -> NetTcp.Server.t option
      val port : NetTcp.Server.t -> int
      val stop : NetTcp.Server.t -> unit
      val wait : NetTcp.Server.t -> unit Lwt.t
    end
end