Skip to content

Commit

Permalink
tcpreuse: error on using tcpreuse with pnet
Browse files Browse the repository at this point in the history
Sharing the TCP Listen socket with WebSocket doesn't work with pnet.
  • Loading branch information
sukunrt committed Dec 30, 2024
1 parent 2209ae0 commit 7caf405
Show file tree
Hide file tree
Showing 2 changed files with 30 additions and 2 deletions.
21 changes: 20 additions & 1 deletion config/config.go
Original file line number Diff line number Diff line change
Expand Up @@ -449,7 +449,22 @@ func (cfg *Config) newBasicHost(swrm *swarm.Swarm, eventBus event.Bus) (*bhost.B
// NewNode constructs a new libp2p Host from the Config.
//
// This function consumes the config. Do not reuse it (really!).
func (cfg *Config) NewNode() (host.Host, error) {
func (cfg *Config) NewNode() (_ host.Host, createErr error) {

defer func() {
if createErr != nil {
if cfg.ResourceManager != nil {
cfg.ResourceManager.Close()
}
if cfg.ConnManager != nil {
cfg.ConnManager.Close()
}
if cfg.Peerstore != nil {
cfg.Peerstore.Close()
}
}
}()

if cfg.EnableAutoRelay && !cfg.Relay {
return nil, fmt.Errorf("cannot enable autorelay; relay is not enabled")
}
Expand All @@ -466,6 +481,10 @@ func (cfg *Config) NewNode() (host.Host, error) {
rcmgr.MustRegisterWith(cfg.PrometheusRegisterer)
}

if len(cfg.PSK) > 0 && cfg.ShareTCPListener {
return nil, errors.New("cannot use shared TCP and WebSocket listener with PSK")
}

fxopts := []fx.Option{
fx.Provide(func() event.Bus {
return eventbus.NewBus(eventbus.WithMetricsTracer(eventbus.NewMetricsTracer(eventbus.WithRegisterer(cfg.PrometheusRegisterer))))
Expand Down
11 changes: 10 additions & 1 deletion libp2p_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,7 @@ import (
"github.com/libp2p/go-libp2p/core/network"
"github.com/libp2p/go-libp2p/core/peer"
"github.com/libp2p/go-libp2p/core/peerstore"
"github.com/libp2p/go-libp2p/core/pnet"
"github.com/libp2p/go-libp2p/core/routing"
"github.com/libp2p/go-libp2p/core/transport"
rcmgr "github.com/libp2p/go-libp2p/p2p/host/resource-manager"
Expand Down Expand Up @@ -761,6 +762,7 @@ func TestSharedTCPAddr(t *testing.T) {
ListenAddrStrings("/ip4/0.0.0.0/tcp/8888/ws"),
)
require.NoError(t, err)
defer h.Close()
sawTCP := false
sawWS := false
for _, addr := range h.Addrs() {
Expand All @@ -773,5 +775,12 @@ func TestSharedTCPAddr(t *testing.T) {
}
require.True(t, sawTCP)
require.True(t, sawWS)
h.Close()

_, err = New(
ShareTCPListener(),
Transport(tcp.NewTCPTransport),
Transport(websocket.New),
PrivateNetwork(pnet.PSK([]byte{1, 2, 3})),
)
require.ErrorContains(t, err, "cannot use shared TCP and WebSocket listener with PSK")
}

0 comments on commit 7caf405

Please sign in to comment.