aboutsummaryrefslogtreecommitdiffstats
path: root/rpc/http.go
diff options
context:
space:
mode:
authorBas van Kervel <basvankervel@ziggo.nl>2015-04-16 18:56:51 +0800
committerBas van Kervel <basvankervel@ziggo.nl>2015-04-16 18:56:51 +0800
commit57f93d25bd9a09f4a68307342ad44a5af1d5dc26 (patch)
tree9101de89d424d7ddf4c62d3390a528193dbb274b /rpc/http.go
parent205378016fc342a9ee683b3d040b3e7d0e2ebb51 (diff)
downloaddexon-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.go21
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)