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 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_handle : Uwt.Udp.t -> Uwt.Handle.t
  val send_queue_size : Uwt.Udp.t -> int
  val send_queue_count : Uwt.Udp.t -> int
  val init : unit -> Uwt.Udp.t
  val init_ipv4 : unit -> Uwt.Udp.t uv_result
  val init_ipv4_exn : unit -> Uwt.Udp.t
  val init_ipv6 : unit -> Uwt.Udp.t uv_result
  val init_ipv6_exn : unit -> Uwt.Udp.t
  val openudp : Unix.file_descr -> Uwt.Udp.t uv_result
  val openudp_exn : Unix.file_descr -> Uwt.Udp.t
  type mode = Ipv6_only | Reuse_addr
  val bind :
    ?mode:Uwt.Udp.mode list ->
    Uwt.Udp.t -> addr:sockaddr -> unit -> Int_result.unit
  val bind_exn :
    ?mode:Uwt.Udp.mode list -> Uwt.Udp.t -> addr:sockaddr -> unit -> unit
  val getsockname : Uwt.Udp.t -> sockaddr uv_result
  val getsockname_exn : Uwt.Udp.t -> sockaddr
  type membership = Leave_group | Join_group
  val set_membership :
    ?interface:string ->
    Uwt.Udp.t -> multicast:string -> Uwt.Udp.membership -> Int_result.unit
  val set_membership_exn :
    ?interface:string ->
    Uwt.Udp.t -> multicast:string -> Uwt.Udp.membership -> unit
  val set_multicast_loop : Uwt.Udp.t -> bool -> Int_result.unit
  val set_multicast_loop_exn : Uwt.Udp.t -> bool -> unit
  val set_multicast_ttl : Uwt.Udp.t -> int -> Int_result.unit
  val set_multicast_ttl_exn : Uwt.Udp.t -> int -> unit
  val set_multicast_interface : Uwt.Udp.t -> string option -> Int_result.unit
  val set_multicast_interface_exn : Uwt.Udp.t -> string option -> unit
  val set_broadcast : Uwt.Udp.t -> bool -> Int_result.unit
  val set_broadcast_exn : Uwt.Udp.t -> bool -> unit
  val set_ttl : Uwt.Udp.t -> int -> Int_result.unit
  val set_ttl_exn : Uwt.Udp.t -> int -> unit
  val send :
    ?pos:int -> ?len:int -> buf:bytes -> Uwt.Udp.t -> sockaddr -> unit Lwt.t
  val send_ba :
    ?pos:int -> ?len:int -> buf:buf -> Uwt.Udp.t -> sockaddr -> unit Lwt.t
  val send_string :
    ?pos:int -> ?len:int -> buf:string -> Uwt.Udp.t -> sockaddr -> unit Lwt.t
  val send_raw :
    ?pos:int -> ?len:int -> buf:bytes -> Uwt.Udp.t -> sockaddr -> unit Lwt.t
  val send_raw_ba :
    ?pos:int -> ?len:int -> buf:buf -> Uwt.Udp.t -> sockaddr -> unit Lwt.t
  val send_raw_string :
    ?pos:int -> ?len:int -> buf:string -> Uwt.Udp.t -> sockaddr -> unit Lwt.t
  val try_send :
    ?pos:int ->
    ?len:int -> buf:bytes -> Uwt.Udp.t -> sockaddr -> Int_result.int
  val try_send_ba :
    ?pos:int ->
    ?len:int -> buf:buf -> Uwt.Udp.t -> sockaddr -> Int_result.int
  val try_send_string :
    ?pos:int ->
    ?len:int -> buf:string -> Uwt.Udp.t -> sockaddr -> Int_result.int
  val try_sendv :
    Uwt.Udp.t -> Iovec_write.t list -> sockaddr -> Int_result.int
  val sendv_raw : Uwt.Udp.t -> Iovec_write.t list -> sockaddr -> unit Lwt.t
  val sendv : Uwt.Udp.t -> Iovec_write.t list -> sockaddr -> unit Lwt.t
  type recv_result =
      Data of Bytes.t * sockaddr option
    | Partial_data of Bytes.t * sockaddr option
    | Empty_from of sockaddr
    | Transmission_error of error
  val recv_start :
    Uwt.Udp.t -> cb:(Uwt.Udp.recv_result -> unit) -> Int_result.unit
  val recv_start_exn : Uwt.Udp.t -> cb:(Uwt.Udp.recv_result -> unit) -> unit
  val recv_stop : Uwt.Udp.t -> Int_result.unit
  val recv_stop_exn : Uwt.Udp.t -> unit
  type recv = {
    recv_len : int;
    is_partial : bool;
    sockaddr : sockaddr option;
  }
  val recv :
    ?pos:int -> ?len:int -> buf:bytes -> Uwt.Udp.t -> Uwt.Udp.recv Lwt.t
  val recv_ba :
    ?pos:int -> ?len:int -> buf:buf -> Uwt.Udp.t -> Uwt.Udp.recv Lwt.t
end