A libp2p transport implementation for tcp, including reuseport socket options.
Table of Contents
go-tcp-transport is included as a dependency of
go-libp2p, which is the most
common libp2p entry point. If you depend on
go-libp2p, there is generally no
need to explicitly depend on this module.
go-tcp-transport is a standard Go module which can be installed with:
go get github.com/libp2p/go-tcp-transport
This repo is gomod-compatible, and users of
go 1.11 and later with modules enabled will automatically pull the latest tagged release
by referencing this package. Upgrades to future releases can be managed using
or by editing your
go.mod file as described by the gomod documentation.
TCP is one of the default transports enabled when constructing a standard libp2p Host, along with WebSockets.
libp2p.New to construct a libp2p Host will enable
the TCP transport, unless you override the default transports by passing in
To explicitly enable the TCP transport while constructing a host, use the
libp2p.Transport option, passing in the
NewTCPTransport constructor function:
import ( "context" libp2p "github.com/libp2p/go-libp2p" tcp "github.com/libp2p/go-tcp-transport" ) ctx := context.Background() // TCP only: h, err := libp2p.New(ctx, libp2p.Transport(tcp.NewTCPTransport) )
The example above will replace the default transports with a single TCP
transport. To add multiple tranports, use
// TCP and QUIC: h, err := libp2p.New(ctx, libp2p.ChainOptions( libp2p.Transport(tcp.NewTCPTransport), libp2p.Transport(quic.NewTransport)) // see https://github.com/libp2p/go-libp2p-quic-transport )
The TCP transport supports multiaddrs that contain a
component, provided that there is sufficient addressing information for the IP
layer of the connection.
||IPv4: 22.214.171.124, TCP port 1234|
||IPv6 loopback, TCP port 1234|
||DNS over IPv4, hostname
Support for IP layer protocols is provided by the go-multiaddr-net module.
Security and Multiplexing
Because TCP lacks native connection security and stream multiplexing facilities, the TCP transport uses a transport upgrader to provide those features. The transport upgrader negotiates transport security and multiplexing for each connection according to the protocols supported by each party.
SO_REUSEPORT socket option allows multiple processes
or threads to bind to the same TCP port, provided that all of them set the
socket option. This has some performance benefits, and it can potentially assist
in NAT traversal by only requiring one port to be accessible for many
The reuseport functionality is provided by a seperate module,
is enabled by default, but can be disabled at runtime by setting the
LIBP2P_TCP_REUSEPORT environment variable to
PRs are welcome!
Small note: If editing the Readme, please conform to the standard-readme specification.
MIT © Jeromy Johnson
The last gx published version of this module was: 2.0.28: QmTGiDkw4eeKq31wwpQRk5GwWiReaxrcTQLuCCLWgfKo5M