sig
  type write_buffer =
      (Core.Std.read_write, Core.Std.Iobuf.seek) Core.Std.Iobuf.t
  val default_capacity : int
  module Config :
    sig
      type t =
        Udp.Config.t = {
        capacity : int;
        init : write_buffer;
        before : write_buffer -> unit;
        after : write_buffer -> unit;
        stop : unit Import.Deferred.t;
      }
      val stop : t -> unit Import.Deferred.t
      val after : t -> write_buffer -> unit
      val before : t -> write_buffer -> unit
      val init : t -> write_buffer
      val capacity : t -> int
      module Fields :
        sig
          val names : string list
          val stop : (t, unit Import.Deferred.t) Fieldslib.Field.t
          val after : (t, write_buffer -> unit) Fieldslib.Field.t
          val before : (t, write_buffer -> unit) Fieldslib.Field.t
          val init : (t, write_buffer) Fieldslib.Field.t
          val capacity : (t, int) Fieldslib.Field.t
          val fold :
            init:'acc__ ->
            capacity:('acc__ -> (t, int) Fieldslib.Field.t -> 'acc__) ->
            init:('acc__ -> (t, write_buffer) Fieldslib.Field.t -> 'acc__) ->
            before:('acc__ ->
                    (t, write_buffer -> unit) Fieldslib.Field.t -> 'acc__) ->
            after:('acc__ ->
                   (t, write_buffer -> unit) Fieldslib.Field.t -> 'acc__) ->
            stop:('acc__ ->
                  (t, unit Import.Deferred.t) Fieldslib.Field.t -> 'acc__) ->
            'acc__
          val make_creator :
            capacity:((t, int) Fieldslib.Field.t ->
                      'compile_acc__ -> ('input__ -> int) * 'compile_acc__) ->
            init:((t, write_buffer) Fieldslib.Field.t ->
                  'compile_acc__ ->
                  ('input__ -> write_buffer) * 'compile_acc__) ->
            before:((t, write_buffer -> unit) Fieldslib.Field.t ->
                    'compile_acc__ ->
                    ('input__ -> write_buffer -> unit) * 'compile_acc__) ->
            after:((t, write_buffer -> unit) Fieldslib.Field.t ->
                   'compile_acc__ ->
                   ('input__ -> write_buffer -> unit) * 'compile_acc__) ->
            stop:((t, unit Import.Deferred.t) Fieldslib.Field.t ->
                  'compile_acc__ ->
                  ('input__ -> unit Import.Deferred.t) * 'compile_acc__) ->
            'compile_acc__ -> ('input__ -> t) * 'compile_acc__
          val create :
            capacity:int ->
            init:write_buffer ->
            before:(write_buffer -> unit) ->
            after:(write_buffer -> unit) -> stop:unit Import.Deferred.t -> t
          val map :
            capacity:((t, int) Fieldslib.Field.t -> int) ->
            init:((t, write_buffer) Fieldslib.Field.t -> write_buffer) ->
            before:((t, write_buffer -> unit) Fieldslib.Field.t ->
                    write_buffer -> unit) ->
            after:((t, write_buffer -> unit) Fieldslib.Field.t ->
                   write_buffer -> unit) ->
            stop:((t, unit Import.Deferred.t) Fieldslib.Field.t ->
                  unit Import.Deferred.t) ->
            t
          val iter :
            capacity:((t, int) Fieldslib.Field.t -> unit) ->
            init:((t, write_buffer) Fieldslib.Field.t -> unit) ->
            before:((t, write_buffer -> unit) Fieldslib.Field.t -> unit) ->
            after:((t, write_buffer -> unit) Fieldslib.Field.t -> unit) ->
            stop:((t, unit Import.Deferred.t) Fieldslib.Field.t -> unit) ->
            unit
          val for_all :
            capacity:((t, int) Fieldslib.Field.t -> bool) ->
            init:((t, write_buffer) Fieldslib.Field.t -> bool) ->
            before:((t, write_buffer -> unit) Fieldslib.Field.t -> bool) ->
            after:((t, write_buffer -> unit) Fieldslib.Field.t -> bool) ->
            stop:((t, unit Import.Deferred.t) Fieldslib.Field.t -> bool) ->
            bool
          val exists :
            capacity:((t, int) Fieldslib.Field.t -> bool) ->
            init:((t, write_buffer) Fieldslib.Field.t -> bool) ->
            before:((t, write_buffer -> unit) Fieldslib.Field.t -> bool) ->
            after:((t, write_buffer -> unit) Fieldslib.Field.t -> bool) ->
            stop:((t, unit Import.Deferred.t) Fieldslib.Field.t -> bool) ->
            bool
          val to_list :
            capacity:((t, int) Fieldslib.Field.t -> 'elem__) ->
            init:((t, write_buffer) Fieldslib.Field.t -> 'elem__) ->
            before:((t, write_buffer -> unit) Fieldslib.Field.t -> 'elem__) ->
            after:((t, write_buffer -> unit) Fieldslib.Field.t -> 'elem__) ->
            stop:((t, unit Import.Deferred.t) Fieldslib.Field.t -> 'elem__) ->
            'elem__ list
          val map_poly :
            ([< `Read | `Set_and_create ], t, 'x0) Fieldslib.Field.user ->
            'x0 list
          module Direct :
            sig
              val iter :
                t ->
                capacity:((t, int) Fieldslib.Field.t -> t -> int -> unit) ->
                init:((t, write_buffer) Fieldslib.Field.t ->
                      t -> write_buffer -> unit) ->
                before:((t, write_buffer -> unit) Fieldslib.Field.t ->
                        t -> (write_buffer -> unit) -> unit) ->
                after:((t, write_buffer -> unit) Fieldslib.Field.t ->
                       t -> (write_buffer -> unit) -> unit) ->
                stop:((t, unit Import.Deferred.t) Fieldslib.Field.t ->
                      t -> unit Import.Deferred.t -> unit) ->
                unit
              val fold :
                t ->
                init:'acc__ ->
                capacity:('acc__ ->
                          (t, int) Fieldslib.Field.t -> t -> int -> 'acc__) ->
                init:('acc__ ->
                      (t, write_buffer) Fieldslib.Field.t ->
                      t -> write_buffer -> 'acc__) ->
                before:('acc__ ->
                        (t, write_buffer -> unit) Fieldslib.Field.t ->
                        t -> (write_buffer -> unit) -> 'acc__) ->
                after:('acc__ ->
                       (t, write_buffer -> unit) Fieldslib.Field.t ->
                       t -> (write_buffer -> unit) -> 'acc__) ->
                stop:('acc__ ->
                      (t, unit Import.Deferred.t) Fieldslib.Field.t ->
                      t -> unit Import.Deferred.t -> 'acc__) ->
                'acc__
            end
        end
      val create :
        ?capacity:int ->
        ?init:write_buffer ->
        ?before:(write_buffer -> unit) ->
        ?after:(write_buffer -> unit) ->
        ?stop:unit Import.Deferred.t -> unit -> t
    end
  val sendto_sync :
    unit ->
    (Import.Fd.t ->
     ('a, Core.Std.Iobuf.seek) Core.Std.Iobuf.t ->
     Import.Socket.Address.Inet.t -> [ `Not_ready | `Ok ])
    Core.Std.Or_error.t
  val sendto :
    unit ->
    (Import.Fd.t ->
     ('a, Core.Std.Iobuf.seek) Core.Std.Iobuf.t ->
     Import.Socket.Address.Inet.t -> unit Import.Deferred.t)
    Core.Std.Or_error.t
  val bind :
    ?ifname:string ->
    Import.Socket.Address.Inet.t ->
    ([ `Bound ], Import.Socket.Address.Inet.t) Import.Socket.t
    Import.Deferred.t
  val bind_any :
    unit ->
    ([ `Bound ], Import.Socket.Address.Inet.t) Import.Socket.t
    Import.Deferred.t
  val recvfrom_loop :
    ?config:Config.t ->
    Import.Fd.t ->
    (write_buffer -> Import.Socket.Address.Inet.t -> unit) ->
    unit Import.Deferred.t
  val recvfrom_loop_with_buffer_replacement :
    ?config:Config.t ->
    Import.Fd.t ->
    (write_buffer -> Import.Socket.Address.Inet.t -> write_buffer) ->
    write_buffer Import.Deferred.t
  val read_loop :
    ?config:Config.t ->
    Import.Fd.t -> (write_buffer -> unit) -> unit Import.Deferred.t
  val read_loop_with_buffer_replacement :
    ?config:Config.t ->
    Import.Fd.t ->
    (write_buffer -> write_buffer) -> write_buffer Import.Deferred.t
  val recvmmsg_loop :
    (?config:Config.t ->
     Import.Fd.t ->
     ?create_srcs:bool ->
     ?max_count:int ->
     ?bufs:write_buffer array ->
     (?srcs:Core.Std.Unix.sockaddr array ->
      write_buffer array -> count:int -> unit) ->
     unit Import.Deferred.t)
    Core.Std.Or_error.t
  val bind_to_interface_exn :
    (ifname:string -> Import.Fd.t -> unit) Core.Std.Or_error.t
end