sig
  type t
  external create : unit -> SFSocketSelector.t
    = "caml_sfSocketSelector_create"
  external copy : selector:SFSocketSelector.t -> SFSocketSelector.t
    = "caml_sfSocketSelector_copy"
  external destroy : selector:SFSocketSelector.t -> unit
    = "caml_sfSocketSelector_destroy"
  external addTcpListener :
    selector:SFSocketSelector.t -> socket:SFTcpListener.t -> unit
    = "caml_sfSocketSelector_addTcpListener"
  external addTcpSocket :
    selector:SFSocketSelector.t -> socket:SFTcpSocket.t -> unit
    = "caml_sfSocketSelector_addTcpSocket"
  external addUdpSocket :
    selector:SFSocketSelector.t -> socket:SFUdpSocket.t -> unit
    = "caml_sfSocketSelector_addUdpSocket"
  external removeTcpSocket :
    selector:SFSocketSelector.t -> socket:SFTcpSocket.t -> unit
    = "caml_sfSocketSelector_removeTcpSocket"
  external clear : selector:SFSocketSelector.t -> unit
    = "caml_sfSocketSelector_clear"
  external wait :
    selector:SFSocketSelector.t -> ?timeout:SFTime.t -> unit -> bool
    = "caml_sfSocketSelector_wait"
  external isTcpListenerReady :
    selector:SFSocketSelector.t -> socket:SFTcpListener.t -> bool
    = "caml_sfSocketSelector_isTcpListenerReady"
  external isTcpSocketReady :
    selector:SFSocketSelector.t -> socket:SFTcpSocket.t -> bool
    = "caml_sfSocketSelector_isTcpSocketReady"
  external isUdpSocketReady :
    selector:SFSocketSelector.t -> socket:SFUdpSocket.t -> bool
    = "caml_sfSocketSelector_isUdpSocketReady"
end