mirror of
https://github.com/coredns/coredns.git
synced 2025-10-27 08:14:18 -04:00
34
core/dnsserver/listen_go111.go
Normal file
34
core/dnsserver/listen_go111.go
Normal file
@@ -0,0 +1,34 @@
|
||||
// +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)
|
||||
}
|
||||
11
core/dnsserver/listen_go_not111.go
Normal file
11
core/dnsserver/listen_go_not111.go
Normal file
@@ -0,0 +1,11 @@
|
||||
// +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
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user