OSDN Git Service

Hulk did something
[bytom/vapor.git] / vendor / github.com / miekg / dns / listen_go111.go
1 // +build go1.11
2 // +build aix darwin dragonfly freebsd linux netbsd openbsd
3
4 package dns
5
6 import (
7         "context"
8         "net"
9         "syscall"
10
11         "golang.org/x/sys/unix"
12 )
13
14 const supportsReusePort = true
15
16 func reuseportControl(network, address string, c syscall.RawConn) error {
17         var opErr error
18         err := c.Control(func(fd uintptr) {
19                 opErr = unix.SetsockoptInt(int(fd), unix.SOL_SOCKET, unix.SO_REUSEPORT, 1)
20         })
21         if err != nil {
22                 return err
23         }
24
25         return opErr
26 }
27
28 func listenTCP(network, addr string, reuseport bool) (net.Listener, error) {
29         var lc net.ListenConfig
30         if reuseport {
31                 lc.Control = reuseportControl
32         }
33
34         return lc.Listen(context.Background(), network, addr)
35 }
36
37 func listenUDP(network, addr string, reuseport bool) (net.PacketConn, error) {
38         var lc net.ListenConfig
39         if reuseport {
40                 lc.Control = reuseportControl
41         }
42
43         return lc.ListenPacket(context.Background(), network, addr)
44 }