From 7607cc4106ffe75525b3da6333cae11ff2e28199 Mon Sep 17 00:00:00 2001 From: cheatfate Date: Fri, 8 Jun 2018 09:31:51 +0300 Subject: [PATCH] Fix connect(). --- eth-rpc/server.nim | 53 ++++++++++++++++++++++++++++++++++-------- tests/testrpcmacro.nim | 2 +- 2 files changed, 44 insertions(+), 11 deletions(-) diff --git a/eth-rpc/server.nim b/eth-rpc/server.nim index 89a9745..f363ea2 100644 --- a/eth-rpc/server.nim +++ b/eth-rpc/server.nim @@ -140,21 +140,54 @@ proc processClient(server: StreamServer, client: StreamTransport) {.async.} = "Error: Unknown error occurred", %"") proc newRpcServer*(address = "localhost", port: Port = Port(8545)): RpcServer = - let tas4 = resolveTAddress(address, port, IpAddressFamily.IPv4) - let tas6 = resolveTAddress(address, port, IpAddressFamily.IPv6) + var + tas4: seq[TransportAddress] + tas6: seq[TransportAddress] + + # Attempt to resolve `address` for IPv4 address space. + try: + tas4 = resolveTAddress(address, port, IpAddressFamily.IPv4) + except: + discard + + # Attempt to resolve `address` for IPv6 address space. + try: + tas6 = resolveTAddress(address, port, IpAddressFamily.IPv6) + except: + discard + + if len(tas4) == 0 and len(tas6) == 0: + # Address was not resolved, critical error. + # TODO: Custom RpcException error. + raise newException(ValueError, + "Address " & address & " could not be resolved!") + result = RpcServer() result.procs = newTable[string, RpcProc]() result.servers = newSeq[StreamServer]() for item in tas4: - ifDebug: echo "Create server on " & $item - var server = createStreamServer(item, processClient, {ReuseAddr}, - udata = result) - result.servers.add(server) + try: + ifDebug: echo "Create server on " & $item + var server = createStreamServer(item, processClient, {ReuseAddr}, + udata = result) + result.servers.add(server) + except: + ifDebug: echo "Failed to create server on " & $item + for item in tas6: - ifDebug: echo "Create server on " & $item - var server = createStreamServer(item, processClient, {ReuseAddr}, - udata = result) - result.servers.add(server) + try: + ifDebug: echo "Create server on " & $item + var server = createStreamServer(item, processClient, {ReuseAddr}, + udata = result) + result.servers.add(server) + except: + ifDebug: echo "Failed to create server on " & $item + + if len(result.servers) == 0: + # Server was not bound, critical error. + # TODO: Custom RpcException error + raise newException(ValueError, + "Could not setup server on " & address & ":" & $int(port)) proc start*(server: RpcServer) = ## Start the RPC server. diff --git a/tests/testrpcmacro.nim b/tests/testrpcmacro.nim index 539ea73..e25d247 100644 --- a/tests/testrpcmacro.nim +++ b/tests/testrpcmacro.nim @@ -134,4 +134,4 @@ suite "Server types": # TODO: When errors are proper return values, check error for param name s.stop() -s.close() \ No newline at end of file +s.close()