This module allows high-level and efficient I/O multiplexing.
Supported OS primitives: epoll, kqueue, poll and Windows select.
To use threadsafe version of this module, it needs to be compiled with both -d:threadsafe and --threads:on options.
Supported features: files, sockets, pipes, timers, processes, signals and user events.
Fully supported OS: MacOSX, FreeBSD, OpenBSD, NetBSD, Linux (except for Android).
Partially supported OS: Windows (only sockets and user events), Solaris (files, sockets, handles and user events). Android (files, sockets, handles and user events).
TODO: /dev/poll, event ports and filesystem events.
Types
Event {.pure.} = enum Read, Write, Timer, Signal, Process, Vnode, User, Error, Oneshot, Finished, VnodeWrite, VnodeDelete, VnodeExtend, VnodeAttrib, VnodeLink, VnodeRename, VnodeRevoke
- Source Edit
IOSelectorsException = object of CatchableError
- Source Edit
SelectEvent = ptr SelectEventImpl
- Source Edit
SelectResult[T] = Result[T, OSErrorCode]
- Source Edit
Consts
asyncEventEngine {.strdefine.} = "epoll"
- Engine type which is going to be used by module. Source Edit
asyncEventsCount {.intdefine.} = 64
- Number of epoll events retrieved by syscall. Source Edit
asyncInitialSize {.intdefine.} = 64
- Initial size of SelectorT's array of file descriptors. Source Edit
Procs
proc close(event: SelectEvent) {....raises: [IOSelectorsException], raises: [], tags: [], forbids: [].}
- Source Edit
proc close[T](s: Selector[T]) {....raises: [IOSelectorsException], raises: [].}
- Source Edit
proc close2(event: SelectEvent): SelectResult[void] {....raises: [], tags: [], forbids: [].}
- Source Edit
proc close2[T](s: Selector[T]): SelectResult[void] {....raises: [].}
- Source Edit
proc new(t: typedesc[SelectEvent]): SelectResult[SelectEvent] {....raises: [].}
- Source Edit
proc newSelectEvent(): SelectEvent {....raises: [IOSelectorsException], raises: [], tags: [], forbids: [].}
- Source Edit
proc newSelector[T](): Selector[T] {....raises: [OSError], raises: [].}
- Source Edit
proc registerEvent[T](s: Selector[T]; event: SelectEvent; data: T) {. ...raises: [IOSelectorsException], raises: [].}
- Source Edit
proc registerEvent2[T](s: Selector[T]; ev: SelectEvent; data: T): SelectResult[ cint] {....raises: [].}
- Source Edit
proc registerHandle[T](s: Selector[T]; fd: cint | SocketHandle; events: set[Event]; data: T) {. ...raises: [IOSelectorsException], raises: [].}
- Source Edit
proc registerHandle2[T](s: Selector[T]; fd: cint; events: set[Event]; data: T): SelectResult[ void] {....raises: [].}
- Source Edit
proc registerProcess[T](s: Selector; pid: int; data: T): SelectResult[cint] {. ...raises: [].}
- Source Edit
proc registerSignal[T](s: Selector[T]; signal: int; data: T): SelectResult[cint] {. ...raises: [].}
- Source Edit
proc registerTimer[T](s: Selector[T]; timeout: int; oneshot: bool; data: T): cint {. discardable, ...raises: [IOSelectorsException], raises: [].}
- Source Edit
proc registerTimer2[T](s: Selector[T]; timeout: int; oneshot: bool; data: T): SelectResult[ cint] {....raises: [].}
- Source Edit
proc selectInto[T](s: Selector[T]; timeout: int; readyKeys: var openArray[ReadyKey]): int {. ...raises: [IOSelectorsException], raises: [].}
- Source Edit
proc selectInto2[T](s: Selector[T]; timeout: int; readyKeys: var openArray[ReadyKey]): SelectResult[int] {. ...raises: [].}
- Source Edit
proc trigger(event: SelectEvent) {....raises: [IOSelectorsException], raises: [], tags: [], forbids: [].}
- Source Edit
proc trigger2(event: SelectEvent): SelectResult[void] {....raises: [], tags: [], forbids: [].}
- Source Edit
proc unregister[T](s: Selector[T]; event: SelectEvent) {. ...raises: [IOSelectorsException], raises: [].}
- Source Edit
proc unregister[T](s: Selector[T]; fd: cint | SocketHandle) {. ...raises: [IOSelectorsException], raises: [].}
- Source Edit
proc unregister2[T](s: Selector[T]; event: SelectEvent): SelectResult[void] {. ...raises: [].}
- Source Edit
proc unregister2[T](s: Selector[T]; fd: cint): SelectResult[void] {....raises: [].}
- Source Edit
proc updateHandle[T](s: Selector[T]; fd: cint | SocketHandle; events: set[Event]) {. ...raises: [IOSelectorsException], raises: [].}
- Source Edit
proc updateHandle2[T](s: Selector[T]; fd: cint; events: set[Event]): SelectResult[ void] {....raises: [].}
- Source Edit