diff options
author | Simon Hafner <hafnersimon@gmail.com> | 2015-05-02 05:28:53 +0500 |
---|---|---|
committer | Simon Hafner <hafnersimon@gmail.com> | 2015-05-02 05:28:53 +0500 |
commit | a1ee169d09b8d8c001e868d889c517fad4d1efaa (patch) | |
tree | d1331534b51cd9aaaf80bdc02a26a64af6d4626f /compiler | |
parent | 39378823ae5c0df8d2baa4e1ee07b71786736bef (diff) | |
download | Nim-a1ee169d09b8d8c001e868d889c517fad4d1efaa.tar.gz |
implemented nextFreePort for nimsuggest
Diffstat (limited to 'compiler')
-rw-r--r-- | compiler/nimsuggest/nimsuggest.nim | 25 |
1 files changed, 21 insertions, 4 deletions
diff --git a/compiler/nimsuggest/nimsuggest.nim b/compiler/nimsuggest/nimsuggest.nim index 7e0d3a399..00b3bcbfd 100644 --- a/compiler/nimsuggest/nimsuggest.nim +++ b/compiler/nimsuggest/nimsuggest.nim @@ -13,6 +13,11 @@ import strutils, os, parseopt, parseutils, sequtils, net import options, commands, modules, sem, passes, passaux, msgs, nimconf, extccomp, condsyms, lists, net, rdstdin, sexp, suggest, ast +when defined(windows): + import winlean +else: + import posix + const Usage = """ Nimsuggest - Tool to give every editor IDE like capabilities for Nim Usage: @@ -130,8 +135,21 @@ proc returnEPC(socket: var Socket, uid: string, s: SexpNode, return_symbol = "re socket.send(response) socket.close() -proc findEPCPort(): int = - 55822 # guaranteed to be random +proc nextFreePort(server: Socket, host: string, start = 30000): int = + result = start + while true: + try: + server.bindaddr(Port(result), host) + return + except OsError: + when defined(windows): + let checkFor = WSAEADDRINUSE.OSErrorCode + else: + let checkFor = EADDRINUSE.OSErrorCode + if osLastError() != checkFor: + raise getCurrentException() + else: + result += 1 proc parseCmdLine(cmd: string) = template toggle(sw) = @@ -199,9 +217,8 @@ proc serve() = stdoutSocket.send("\c\L") stdoutSocket.close() of mepc: - let port = findEPCPort() var server = newSocket() - server.bindaddr(Port(port), "localhost") + let port = nextFreePort(server, "localhost") var inp = "".TaintedString server.listen() echo(port) |