Skip to content
File

Blob: util/reuse/control_linux.go

go31 lines
1//go:build linux
2 
3package reuse
4 
5import (
6 "strings"
7 "syscall"
8 
9 "golang.org/x/sys/unix"
10)
11 
12func Control(network, address string, c syscall.RawConn) error {
13 if !strings.HasPrefix(network, "tcp") && !strings.HasPrefix(network, "udp") {
14 return nil
15 }
16 
17 var err error
18 c.Control(func(fd uintptr) {
19 err = unix.SetsockoptInt(int(fd), unix.SOL_SOCKET, unix.SO_REUSEADDR, 1)
20 if err != nil {
21 return
22 }
23 
24 err = unix.SetsockoptInt(int(fd), unix.SOL_SOCKET, unix.SO_REUSEPORT, 1)
25 if err != nil {
26 return
27 }
28 })
29 return err
30}