mirror of
https://github.com/nim-lang/Nim.git
synced 2026-07-19 07:21:19 +00:00
Selectors module now uses select on operating systems other than Linux.
This commit is contained in:
@@ -247,6 +247,10 @@ Internet Protocols and Support
|
||||
* `rawsockets <rawsockets.html>`_
|
||||
This module implements a low-level sockets API.
|
||||
|
||||
* `selectors <selectors.html>`_
|
||||
This module implements a selector API with backends specific to each OS.
|
||||
Currently epoll on Linux and select on other operating systems.
|
||||
|
||||
Parsers
|
||||
-------
|
||||
|
||||
|
||||
@@ -126,19 +126,12 @@ when defined(linux) or defined(nimdoc):
|
||||
else:
|
||||
return false
|
||||
|
||||
proc contains*(s: PSelector, key: PSelectorKey): bool =
|
||||
## Determines whether selector contains this selector key. More accurate
|
||||
## than checking if the file descriptor is in the selector because it
|
||||
## ensures that the keys are equal. File descriptors may not always be
|
||||
## unique especially when an fd is closed and then a new one is opened,
|
||||
## the new one may have the same value.
|
||||
return key.fd in s and s.fds[key.fd] == key
|
||||
|
||||
proc `[]`*(s: PSelector, fd: TSocketHandle): PSelectorKey =
|
||||
## Retrieves the selector key for ``fd``.
|
||||
return s.fds[fd]
|
||||
|
||||
elif defined(windows):
|
||||
else:
|
||||
# TODO: kqueue for bsd/mac os x.
|
||||
type
|
||||
PSelector* = ref object
|
||||
fds: TTable[TSocketHandle, PSelectorKey]
|
||||
@@ -228,11 +221,13 @@ elif defined(windows):
|
||||
proc `[]`*(s: PSelector, fd: TSocketHandle): PSelectorKey =
|
||||
return s.fds[fd]
|
||||
|
||||
elif defined(bsd) or defined(macosx):
|
||||
# TODO: kqueue
|
||||
{.error: "Sorry your platform is not supported yet.".}
|
||||
else:
|
||||
{.error: "Sorry your platform is not supported.".}
|
||||
proc contains*(s: PSelector, key: PSelectorKey): bool =
|
||||
## Determines whether selector contains this selector key. More accurate
|
||||
## than checking if the file descriptor is in the selector because it
|
||||
## ensures that the keys are equal. File descriptors may not always be
|
||||
## unique especially when an fd is closed and then a new one is opened,
|
||||
## the new one may have the same value.
|
||||
return key.fd in s and s.fds[key.fd] == key
|
||||
|
||||
when isMainModule:
|
||||
# Select()
|
||||
@@ -258,12 +253,3 @@ when isMainModule:
|
||||
assert selector.unregister(sock.getFD).fd == sock.getFD
|
||||
selector.close()
|
||||
break
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -63,7 +63,7 @@ srcdoc2: "pure/asyncio;pure/actors;core/locks;pure/oids;pure/endians;pure/uri"
|
||||
srcdoc2: "pure/nimprof;pure/unittest;packages/docutils/highlite"
|
||||
srcdoc2: "packages/docutils/rst;packages/docutils/rstast"
|
||||
srcdoc2: "packages/docutils/rstgen;pure/logging;pure/asyncdispatch;pure/asyncnet"
|
||||
srcdoc2: "pure/rawsockets;pure/asynchttpserver;pure/net"
|
||||
srcdoc2: "pure/rawsockets;pure/asynchttpserver;pure/net;pure/selectors"
|
||||
|
||||
webdoc: "wrappers/libcurl;pure/md5;wrappers/mysql;wrappers/iup"
|
||||
webdoc: "wrappers/sqlite3;wrappers/postgres;wrappers/tinyc"
|
||||
|
||||
Reference in New Issue
Block a user