12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273(* This file is part of Luv, released under the MIT license. See LICENSE.md for
details, or visit https://github.com/aantron/luv/blob/master/LICENSE.md. *)includeHelpers.Retained(structincludeC.Types.Handletype'kindbase='kindhandleincludeC.Functions.Handleend)letis_closinghandle=C.Functions.Handle.is_closing(coercehandle)letclose_trampoline=C.Functions.Handle.get_close_trampoline()letclosehandlecallback=ifis_closinghandlethen()elsebeginset_reference~index:C.Types.Handle.close_callback_indexhandle(fun()->releasehandle;callback());C.Functions.Handle.close(coercehandle)close_trampolineendletis_activehandle=C.Functions.Handle.is_active(coercehandle)letrefhandle=C.Functions.Handle.ref(coercehandle)letunrefhandle=C.Functions.Handle.unref(coercehandle)lethas_refhandle=C.Functions.Handle.has_ref(coercehandle)letbuffer_sizec_functionhandle=letsize=Ctypes.(allocateint0)inc_function(coercehandle)size|>Error.to_result(Ctypes.(!@)size)letsend_buffer_sizehandle=buffer_sizeC.Functions.Handle.send_buffer_sizehandleletrecv_buffer_sizehandle=buffer_sizeC.Functions.Handle.recv_buffer_sizehandleletset_buffer_sizec_functionhandlesize=letsize=Ctypes.(allocateintsize)inc_function(coercehandle)sizeletset_send_buffer_sizehandlesize=set_buffer_sizeC.Functions.Handle.send_buffer_sizehandlesize|>Error.to_result()letset_recv_buffer_sizehandlesize=set_buffer_sizeC.Functions.Handle.recv_buffer_sizehandlesize|>Error.to_result()letfilenohandle=letos_fd=Ctypes.makeC.Types.Os_fd.tinC.Functions.Handle.fileno(coercehandle)(Ctypes.addros_fd)|>Error.to_resultos_fdletget_loophandle=C.Functions.Handle.get_loop(coercehandle)