diff options
author | Bas van Kervel <basvankervel@ziggo.nl> | 2015-04-16 18:56:51 +0800 |
---|---|---|
committer | Bas van Kervel <basvankervel@ziggo.nl> | 2015-04-16 18:56:51 +0800 |
commit | 57f93d25bd9a09f4a68307342ad44a5af1d5dc26 (patch) | |
tree | 9101de89d424d7ddf4c62d3390a528193dbb274b /rpc/http.go | |
parent | 205378016fc342a9ee683b3d040b3e7d0e2ebb51 (diff) | |
download | dexon-57f93d25bd9a09f4a68307342ad44a5af1d5dc26.tar.gz dexon-57f93d25bd9a09f4a68307342ad44a5af1d5dc26.tar.zst dexon-57f93d25bd9a09f4a68307342ad44a5af1d5dc26.zip |
admin.stopRPC support added which stops the RPC HTTP listener
Diffstat (limited to 'rpc/http.go')
-rw-r--r-- | rpc/http.go | 21 |
1 files changed, 19 insertions, 2 deletions
diff --git a/rpc/http.go b/rpc/http.go index 790442a28..61f8da549 100644 --- a/rpc/http.go +++ b/rpc/http.go @@ -5,7 +5,6 @@ import ( "fmt" "io" "io/ioutil" - "net" "net/http" "github.com/ethereum/go-ethereum/logger" @@ -15,6 +14,7 @@ import ( ) var rpclogger = logger.NewLogger("RPC") +var rpclistener *ControllableTCPListener const ( jsonrpcver = "2.0" @@ -22,11 +22,17 @@ const ( ) func Start(pipe *xeth.XEth, config RpcConfig) error { - l, err := net.Listen("tcp", fmt.Sprintf("%s:%d", config.ListenAddress, config.ListenPort)) + if rpclistener != nil { // listener already running + glog.Infoln("RPC listener already running") + return fmt.Errorf("RPC already running on %s", rpclistener.Addr().String()) + } + + l, err := NewControllableTCPListener(fmt.Sprintf("%s:%d", config.ListenAddress, config.ListenPort)) if err != nil { rpclogger.Errorf("Can't listen on %s:%d: %v", config.ListenAddress, config.ListenPort, err) return err } + rpclistener = l var handler http.Handler if len(config.CorsDomain) > 0 { @@ -45,6 +51,17 @@ func Start(pipe *xeth.XEth, config RpcConfig) error { return nil } +func Stop() error { + if rpclistener == nil { // listener not running + glog.Infoln("RPC listener not running") + return nil + } + + rpclistener.Stop() + rpclistener = nil + return nil +} + // JSONRPC returns a handler that implements the Ethereum JSON-RPC API. func JSONRPC(pipe *xeth.XEth) http.Handler { api := NewEthereumApi(pipe) |