diff --git a/httpbeast.nimble b/httpbeast.nimble index 7180773..ea2be4e 100644 --- a/httpbeast.nimble +++ b/httpbeast.nimble @@ -1,6 +1,6 @@ # Package -version = "0.3.0" +version = "0.4.0" author = "Dominik Picheta" description = "A super-fast epoll-backed and parallel HTTP server." license = "MIT" diff --git a/src/httpbeast.nim b/src/httpbeast.nim index a2524fe..118fa32 100644 --- a/src/httpbeast.nim +++ b/src/httpbeast.nim @@ -54,6 +54,9 @@ type domain*: Domain numThreads: int loggers: seq[Logger] + reusePort: bool + ## controls whether to fail with "Address already in use". + ## Setting this to false will raise when `threads` are on. HttpBeastDefect* = ref object of Defect @@ -63,14 +66,15 @@ const proc initSettings*(port: Port = Port(8080), bindAddr: string = "", numThreads: int = 0, - domain = Domain.AF_INET): Settings = - + domain = Domain.AF_INET, + reusePort = true): Settings = Settings( port: port, bindAddr: bindAddr, domain: domain, numThreads: numThreads, - loggers: getHandlers() + loggers: getHandlers(), + reusePort: reusePort, ) proc initData(fdKind: FdKind, ip = ""): Data = @@ -317,7 +321,9 @@ proc eventLoop(params: (OnRequest, Settings)) = let server = newSocket(settings.domain) server.setSockOpt(OptReuseAddr, true) - server.setSockOpt(OptReusePort, true) + if compileOption("threads") and not settings.reusePort: + raise HttpBeastDefect(msg: "--threads:on requires reusePort to be enabled in settings") + server.setSockOpt(OptReusePort, settings.reusePort) server.bindAddr(settings.port, settings.bindAddr) server.listen() server.getFd().setBlocking(false)