forked from TrueCloudLab/neoneo-go
connmgr: correctly pass binding error to the server
And make the node fail gracefully if it's unable to bind. Before this commit: ----- Server is starting up Connection manager started Error connecting to outbound listen tcp 127.0.0.1:20332: bind: address already in use We have connected successfully to: 127.0.0.1:20334 panic: runtime error: invalid memory address or nil pointer dereference panic: runtime error: invalid memory address or nil pointer dereference [signal SIGSEGV: segmentation violation code=0x1 addr=0x28 pc=0x6bbfa2] goroutine 12 [running]: github.com/CityOfZion/neo-go/pkg/connmgr.New.func1.1(0x0, 0x0) /home/rik/dev/neo-go/pkg/connmgr/connmgr.go:47 +0x22 panic(0x718980, 0xa22f70) /usr/lib64/go/1.12/src/runtime/panic.go:522 +0x1b5 github.com/CityOfZion/neo-go/pkg/connmgr.New.func1(0xc000013430, 0xc000013450, 0xc000013440, 0xc0005265f0, 0xf, 0x0) /home/rik/dev/neo-go/pkg/connmgr/connmgr.go:52 +0x15e created by github.com/CityOfZion/neo-go/pkg/connmgr.New /home/rik/dev/neo-go/pkg/connmgr/connmgr.go:38 +0xfe exit status 2 ----- After this commit: ----- listen tcp 127.0.0.1:20332: bind: address already in use -----
This commit is contained in:
parent
d6fc045142
commit
9a30f2fbcc
3 changed files with 13 additions and 11 deletions
|
@ -27,7 +27,13 @@ type Connmgr struct {
|
||||||
}
|
}
|
||||||
|
|
||||||
//New creates a new connection manager
|
//New creates a new connection manager
|
||||||
func New(cfg Config) *Connmgr {
|
func New(cfg Config) (*Connmgr, error) {
|
||||||
|
listener, err := net.Listen("tcp", cfg.AddressPort)
|
||||||
|
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
cnnmgr := &Connmgr{
|
cnnmgr := &Connmgr{
|
||||||
cfg,
|
cfg,
|
||||||
make(map[string]*Request),
|
make(map[string]*Request),
|
||||||
|
@ -36,13 +42,6 @@ func New(cfg Config) *Connmgr {
|
||||||
}
|
}
|
||||||
|
|
||||||
go func() {
|
go func() {
|
||||||
|
|
||||||
listener, err := net.Listen("tcp", cfg.AddressPort)
|
|
||||||
|
|
||||||
if err != nil {
|
|
||||||
fmt.Println("Error connecting to outbound ", err)
|
|
||||||
}
|
|
||||||
|
|
||||||
defer func() {
|
defer func() {
|
||||||
listener.Close()
|
listener.Close()
|
||||||
}()
|
}()
|
||||||
|
@ -59,7 +58,7 @@ func New(cfg Config) *Connmgr {
|
||||||
|
|
||||||
}()
|
}()
|
||||||
|
|
||||||
return cnnmgr
|
return cnnmgr, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
// NewRequest will make a new connection gets the address from address func in config
|
// NewRequest will make a new connection gets the address from address func in config
|
||||||
|
|
|
@ -11,7 +11,7 @@ import (
|
||||||
iputils "github.com/CityOfZion/neo-go/pkg/wire/util/ip"
|
iputils "github.com/CityOfZion/neo-go/pkg/wire/util/ip"
|
||||||
)
|
)
|
||||||
|
|
||||||
func setupConnManager(s *Server, port uint16) *connmgr.Connmgr {
|
func setupConnManager(s *Server, port uint16) (*connmgr.Connmgr, error) {
|
||||||
cfg := connmgr.Config{
|
cfg := connmgr.Config{
|
||||||
GetAddress: s.getAddress,
|
GetAddress: s.getAddress,
|
||||||
OnAccept: s.onAccept,
|
OnAccept: s.onAccept,
|
||||||
|
|
|
@ -63,7 +63,10 @@ func New(net protocol.Magic, port uint16) (*Server, error) {
|
||||||
s.smg = syncmgr
|
s.smg = syncmgr
|
||||||
|
|
||||||
// Setup connection manager
|
// Setup connection manager
|
||||||
connmgr := setupConnManager(s, port)
|
connmgr, err := setupConnManager(s, port)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
s.cmg = connmgr
|
s.cmg = connmgr
|
||||||
|
|
||||||
// Setup peer config
|
// Setup peer config
|
||||||
|
|
Loading…
Reference in a new issue