Commit fb971fff authored by Miek Gieben's avatar Miek Gieben Committed by corbot[bot]

Core: Support REUSE_PORT (#2149)

Automatically submitted.
parent e1978302
// +build go1.11
// +build aix darwin dragonfly freebsd linux netbsd openbsd
package dnsserver
import (
"context"
"net"
"syscall"
"golang.org/x/sys/unix"
)
const supportsReusePort = true
func reuseportControl(network, address string, c syscall.RawConn) (opErr error) {
err := c.Control(func(fd uintptr) {
opErr = unix.SetsockoptInt(int(fd), unix.SOL_SOCKET, unix.SO_REUSEPORT, 1)
})
if err != nil {
return err
}
return opErr
}
func listen(network, addr string) (net.Listener, error) {
lc := net.ListenConfig{Control: reuseportControl}
return lc.Listen(context.Background(), network, addr)
}
func listenPacket(network, addr string) (net.PacketConn, error) {
lc := net.ListenConfig{Control: reuseportControl}
return lc.ListenPacket(context.Background(), network, addr)
}
// +build !go1.11 !aix,!darwin,!dragonfly,!freebsd,!linux,!netbsd,!openbsd
package dnsserver
import "net"
func listen(network, addr string) (net.Listener, error) { return net.Listen(network, addr) }
func listenPacket(network, addr string) (net.PacketConn, error) {
return net.ListenPacket(network, addr)
}
......@@ -135,7 +135,7 @@ func (s *Server) ServePacket(p net.PacketConn) error {
// Listen implements caddy.TCPServer interface.
func (s *Server) Listen() (net.Listener, error) {
l, err := net.Listen("tcp", s.Addr[len(transport.DNS+"://"):])
l, err := listen("tcp", s.Addr[len(transport.DNS+"://"):])
if err != nil {
return nil, err
}
......@@ -144,7 +144,7 @@ func (s *Server) Listen() (net.Listener, error) {
// ListenPacket implements caddy.UDPServer interface.
func (s *Server) ListenPacket() (net.PacketConn, error) {
p, err := net.ListenPacket("udp", s.Addr[len(transport.DNS+"://"):])
p, err := listenPacket("udp", s.Addr[len(transport.DNS+"://"):])
if err != nil {
return nil, err
}
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment