sig
  type t
  val close : t -> Int_result.unit
  val close_noerr : t -> unit
  val close_wait : t -> unit Lwt.t
  val is_active : t -> bool
  val ref' : t -> unit
  val unref : t -> unit
  val has_ref : t -> bool
  val to_handle : t -> Handle.t
  val is_readable : t -> bool
  val is_writable : t -> bool
  val read_start : t -> cb:(Bytes.t uv_result -> unit) -> Int_result.unit
  val read_start_exn : t -> cb:(Bytes.t uv_result -> unit) -> unit
  val read_stop : t -> Int_result.unit
  val read_stop_exn : t -> unit
  val read : ?pos:int -> ?len:int -> t -> buf:bytes -> int Lwt.t
  val read_ba : ?pos:int -> ?len:int -> t -> buf:buf -> int Lwt.t
  val write_queue_size : t -> int
  val try_write : ?pos:int -> ?len:int -> t -> buf:bytes -> Int_result.int
  val try_write_ba : ?pos:int -> ?len:int -> t -> buf:buf -> Int_result.int
  val try_write_string :
    ?pos:int -> ?len:int -> t -> buf:string -> Int_result.int
  val write : ?pos:int -> ?len:int -> t -> buf:bytes -> unit Lwt.t
  val write_string : ?pos:int -> ?len:int -> t -> buf:string -> unit Lwt.t
  val write_ba : ?pos:int -> ?len:int -> t -> buf:buf -> unit Lwt.t
  val write_raw : ?pos:int -> ?len:int -> t -> buf:bytes -> unit Lwt.t
  val write_raw_string :
    ?pos:int -> ?len:int -> t -> buf:string -> unit Lwt.t
  val write_raw_ba : ?pos:int -> ?len:int -> t -> buf:buf -> unit Lwt.t
  val try_writev : t -> Iovec_write.t list -> Int_result.int
  val writev : t -> Iovec_write.t list -> unit Lwt.t
  val writev_emul : t -> Iovec_write.t list -> unit Lwt.t
  val writev_raw : t -> Iovec_write.t list -> unit Lwt.t
  val listen :
    t -> max:int -> cb:(t -> Int_result.unit -> unit) -> Int_result.unit
  val listen_exn : t -> max:int -> cb:(t -> Int_result.unit -> unit) -> unit
  val shutdown : t -> unit Lwt.t
  val set_blocking : t -> bool -> Int_result.unit
  val get_send_buffer_size : t -> Int_result.int
  val get_send_buffer_size_exn : t -> int
  val get_recv_buffer_size : t -> Int_result.int
  val get_recv_buffer_size_exn : t -> int
  val set_send_buffer_size : t -> int -> Int_result.unit
  val set_send_buffer_size_exn : t -> int -> unit
  val set_recv_buffer_size : t -> int -> Int_result.unit
  val set_recv_buffer_size_exn : t -> int -> unit
  val fileno : t -> Unix.file_descr uv_result
  val fileno_exn : t -> Unix.file_descr
  val to_stream : Uwt.Tcp.t -> Uwt.Stream.t
  val init : unit -> Uwt.Tcp.t
  val init_ipv4 : unit -> Uwt.Tcp.t uv_result
  val init_ipv4_exn : unit -> Uwt.Tcp.t
  val init_ipv6 : unit -> Uwt.Tcp.t uv_result
  val init_ipv6_exn : unit -> Uwt.Tcp.t
  val opentcp : Unix.file_descr -> Uwt.Tcp.t uv_result
  val opentcp_exn : Unix.file_descr -> Uwt.Tcp.t
  type mode = Ipv6_only
  val bind :
    ?mode:Uwt.Tcp.mode list ->
    Uwt.Tcp.t -> addr:sockaddr -> unit -> Int_result.unit
  val bind_exn :
    ?mode:Uwt.Tcp.mode list -> Uwt.Tcp.t -> addr:sockaddr -> unit -> unit
  val nodelay : Uwt.Tcp.t -> bool -> Int_result.unit
  val nodelay_exn : Uwt.Tcp.t -> bool -> unit
  val enable_keepalive : Uwt.Tcp.t -> int -> Int_result.unit
  val enable_keepalive_exn : Uwt.Tcp.t -> int -> unit
  val disable_keepalive : Uwt.Tcp.t -> Int_result.unit
  val disable_keepalive_exn : Uwt.Tcp.t -> unit
  val simultaneous_accepts : Uwt.Tcp.t -> bool -> Int_result.unit
  val simultaneous_accepts_exn : Uwt.Tcp.t -> bool -> unit
  val getsockname : Uwt.Tcp.t -> sockaddr uv_result
  val getsockname_exn : Uwt.Tcp.t -> sockaddr
  val getpeername : Uwt.Tcp.t -> sockaddr uv_result
  val getpeername_exn : Uwt.Tcp.t -> sockaddr
  val connect : Uwt.Tcp.t -> addr:sockaddr -> unit Lwt.t
  val accept : Uwt.Tcp.t -> Uwt.Tcp.t uv_result
  val accept_exn : Uwt.Tcp.t -> Uwt.Tcp.t
  val with_tcp : (Uwt.Tcp.t -> 'Lwt.t) -> 'Lwt.t
  val with_connect : addr:sockaddr -> (Uwt.Tcp.t -> 'Lwt.t) -> 'Lwt.t
  val with_open : Unix.file_descr -> (Uwt.Tcp.t -> 'Lwt.t) -> 'Lwt.t
  val with_accept : Uwt.Tcp.t -> (Uwt.Tcp.t -> 'Lwt.t) -> 'Lwt.t
  val accept_raw : server:Uwt.Tcp.t -> client:Uwt.Tcp.t -> Int_result.unit
  val accept_raw_exn : server:Uwt.Tcp.t -> client:Uwt.Tcp.t -> unit
end