dochack/selectors2

Search:
Group by:
Source   Edit  

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  
ReadyKey = object
  fd*: int
  events*: set[Event]
  errorCode*: OSErrorCode
Source   Edit  
SelectEvent = ptr SelectEventImpl
Source   Edit  
Selector[T] = ref SelectorImpl[T]
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 contains[T](s: Selector[T]; fd: SocketHandle | cint): bool {.inline,
    ...raises: [].}
Source   Edit  
proc getFd[T](s: Selector[T]): cint {....raises: [].}
Source   Edit  
proc new(t: typedesc[SelectEvent]): SelectResult[SelectEvent] {....raises: [].}
Source   Edit  
proc new(t: typedesc[Selector]; T: typedesc): SelectResult[Selector[T]] {.
    ...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 select[T](s: Selector[T]; timeout: int): seq[ReadyKey] {....raises: [].}
Source   Edit  
proc select2[T](s: Selector[T]; timeout: int): SelectResult[seq[ReadyKey]] {.
    ...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 setData[T](s: Selector[T]; fd: SocketHandle | cint; data: T): bool {.
    ...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  

Templates

template withData[T](s: Selector[T]; fd: SocketHandle | cint;
                     value, body1, body2: untyped)
Source   Edit  
template withData[T](s: Selector[T]; fd: SocketHandle | cint;
                     value, body: untyped)
Source   Edit