From 2fd74bf7f1e1755fd51f14f3b4918f50667c43cb Mon Sep 17 00:00:00 2001 From: Godfrain Jacques Date: Fri, 28 Jun 2024 13:45:21 -0700 Subject: [PATCH] fix_: prevent multiple http or websocket lauches fixes [5436](https://github.com/status-im/status-go/issues/5436) --- src/app_service/common/net_utils.nim | 13 +++++++++++++ src/app_service/service/accounts/dto/api_config.nim | 10 ++++++++++ 2 files changed, 23 insertions(+) create mode 100644 src/app_service/common/net_utils.nim diff --git a/src/app_service/common/net_utils.nim b/src/app_service/common/net_utils.nim new file mode 100644 index 0000000000..ba7e65241c --- /dev/null +++ b/src/app_service/common/net_utils.nim @@ -0,0 +1,13 @@ +import net + +# Util function to test if a port is busy +proc isPortBusy*(port: Port): bool = + var sock: Socket + try: + sock = newSocket() + sock.setSockOpt(OptReuseAddr, true) + sock.bindAddr(port) + sock.close() + return false + except OSError: + return true \ No newline at end of file diff --git a/src/app_service/service/accounts/dto/api_config.nim b/src/app_service/service/accounts/dto/api_config.nim index 2355ffd593..80c2c37e0f 100644 --- a/src/app_service/service/accounts/dto/api_config.nim +++ b/src/app_service/service/accounts/dto/api_config.nim @@ -1,5 +1,7 @@ import json +include ../../../common/net_utils + type APIConfig* = object apiModules*: string connectorEnabled*: bool @@ -10,13 +12,21 @@ type APIConfig* = object wsHost*: string wsPort*: int +proc checkAndSetPort(port: Port, isEnabled: var bool) = + if isPortBusy(port): + isEnabled = false + proc defaultAPIConfig*(): APIConfig = result.apiModules = "connector" result.connectorEnabled = true + result.httpEnabled = true + checkAndSetPort(Port(8545), result.httpEnabled) result.httpHost = "0.0.0.0" result.httpPort = 8545 + result.wsEnabled = true + checkAndSetPort(Port(8586), result.wsEnabled) result.wsHost = "0.0.0.0" result.wsPort = 8586