modulepackage
0.1.17
Repository: https://github.com/dms3-p2p/go-reuseport.git
Documentation: pkg.go.dev
# README
go-reuseport
This package enables listening and dialing from the same TCP or UDP port. This means that the following sockopts are set:
SO_REUSEADDR
SO_REUSEPORT
This is a simple package to get around the problem of reusing addresses.
The go net
package (to my knowledge) does not allow setting socket options.
This is particularly problematic when attempting to do TCP NAT holepunching,
which requires a process to both Listen and Dial on the same TCP port.
This package makes this possible for me. It is a pretty narrow use case, but
perhaps this package can grow to be more general over time.
Examples
// listen on the same port. oh yeah.
l1, _ := reuse.Listen("tcp", "127.0.0.1:1234")
l2, _ := reuse.Listen("tcp", "127.0.0.1:1234")
// dial from the same port. oh yeah.
l1, _ := reuse.Listen("tcp", "127.0.0.1:1234")
l2, _ := reuse.Listen("tcp", "127.0.0.1:1235")
c, _ := reuse.Dial("tcp", "127.0.0.1:1234", "127.0.0.1:1235")
Note: cant dial self because tcp/ip stacks use 4-tuples to identify connections, and doing so would clash.
Tested
Tested on darwin
and linux
.
# Packages
No description provided by the author
No description provided by the author
No description provided by the author
# Functions
Available returns whether or not SO_REUSEPORT is available in the OS.
Dial dials the given network and address.
Listen listens at the given network and address.
ListenPacket listens at the given network and address.
No description provided by the author
# Variables
ErrDialSelf is returned if we connect to our own source address.
ErrReuseFailed is returned if a reuse attempt was unsuccessful.
ErrUnsuportedProtocol signals that the protocol is not currently supported by this package.