modulepackage
0.2.1
Repository: https://github.com/zhiqiangxu/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 may be set:
SO_REUSEADDR
SO_REUSEPORT
This is a simple package to help with address reuse. This is particularly important when attempting to do TCP NAT holepunching, which requires a process to both Listen and Dial on the same TCP port. This package provides some utilities around enabling this behaviour on various OS.
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
, linux
, and windows
.
# Functions
Available returns whether or not SO_REUSEPORT or equivalent behaviour is available in the OS.
No description provided by the author
Dial dials the given network and address.
DialWithTimeout is like Dial with Timeout if laddr is empty, will choose automatically.
Listen listens at the given network and address.
ListenPacket listens at the given network and address.
No description provided by the author