Skip to content

Commit

Permalink
ported to FreeRTOS
Browse files Browse the repository at this point in the history
(cherry picked from commit 9f56688)
  • Loading branch information
Araq authored and narimiran committed Nov 16, 2020
1 parent 1be3caf commit 0848a81
Show file tree
Hide file tree
Showing 2 changed files with 22 additions and 11 deletions.
22 changes: 12 additions & 10 deletions lib/pure/asyncdispatch.nim
Original file line number Diff line number Diff line change
Expand Up @@ -1946,13 +1946,15 @@ proc activeDescriptors*(): int {.inline.} =
when defined(posix):
import posix

proc maxDescriptors*(): int {.raises: OSError.} =
## Returns the maximum number of active file descriptors for the current
## process. This involves a system call.
when defined(windows):
result = 16_700_000
else:
var fdLim: RLimit
if getrlimit(RLIMIT_NOFILE, fdLim) < 0:
raiseOSError(osLastError())
result = int(fdLim.rlim_cur) - 1
when defined(linux) or defined(windows) or defined(macosx) or defined(bsd):
proc maxDescriptors*(): int {.raises: OSError.} =
## Returns the maximum number of active file descriptors for the current
## process. This involves a system call. For now `maxDescriptors` is
## supported on the following OSes: Windows, Linux, OSX, BSD.
when defined(windows):
result = 16_700_000
else:
var fdLim: RLimit
if getrlimit(RLIMIT_NOFILE, fdLim) < 0:
raiseOSError(osLastError())
result = int(fdLim.rlim_cur) - 1
11 changes: 10 additions & 1 deletion lib/pure/asynchttpserver.nim
Original file line number Diff line number Diff line change
Expand Up @@ -308,9 +308,18 @@ proc processClient(server: AsyncHttpServer, client: AsyncSocket, address: string
)
if not retry: break

const
nimMaxDescriptorsFallback* {.intdefine.} = 16_000 ## fallback value for \
## when `maxDescriptors` is not available.
## This can be set on the command line during compilation
## via `-d:nimMaxDescriptorsFallback=N`

proc listen*(server: AsyncHttpServer; port: Port; address = "") =
## Listen to the given port and address.
server.maxFDs = maxDescriptors()
when declared(maxDescriptors):
server.maxFDs = try: maxDescriptors() except: nimMaxDescriptorsFallback
else:
server.maxFDs = nimMaxDescriptorsFallback
server.socket = newAsyncSocket()
if server.reuseAddr:
server.socket.setSockOpt(OptReuseAddr, true)
Expand Down

0 comments on commit 0848a81

Please sign in to comment.