Documentation ¶
Overview ¶
Package reuseport provides Listen and Dial functions that set socket options in order to be able to reuse ports. You should only use this package if you know what SO_REUSEADDR and SO_REUSEPORT are.
For example:
// 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.
Index ¶
Constants ¶
This section is empty.
Variables ¶
var ErrDialSelf = errors.New("dialed our own socket")
ErrDialSelf is returned if we connect to our own source address.
var ErrReuseFailed = errors.New("reuse failed")
ErrReuseFailed is returned if a reuse attempt was unsuccessful.
var ErrUnsupportedProtocol = errors.New("protocol not yet supported")
ErrUnsuportedProtocol signals that the protocol is not currently supported by this package. This package currently only supports TCP.
Functions ¶
func Available ¶
func Available() bool
Available returns whether or not SO_REUSEPORT is available in the OS. It does so by attepting to open a tcp listener, setting the option, and checking ENOPROTOOPT on error. After checking, the decision is cached for the rest of the process run.
func Dial ¶
Dial dials the given network and address. see net.Dialer.Dial Returns a net.Conn created from a file discriptor for a socket with SO_REUSEPORT and SO_REUSEADDR option set.
func Listen ¶
Listen listens at the given network and address. see net.Listen Returns a net.Listener created from a file discriptor for a socket with SO_REUSEPORT and SO_REUSEADDR option set.
func ListenPacket ¶
func ListenPacket(network, address string) (net.PacketConn, error)
ListenPacket listens at the given network and address. see net.ListenPacket Returns a net.Listener created from a file discriptor for a socket with SO_REUSEPORT and SO_REUSEADDR option set.
Types ¶
type Dialer ¶
Dialer is used to specify the Dial options, much like net.Dialer. We simply wrap a net.Dialer.