26 lines
501 B
Go
26 lines
501 B
Go
|
|
//go:build !windows
|
||
|
|
|
||
|
|
package netbind
|
||
|
|
|
||
|
|
import (
|
||
|
|
"syscall"
|
||
|
|
|
||
|
|
"golang.org/x/sys/unix"
|
||
|
|
)
|
||
|
|
|
||
|
|
func applyIPv6OnlyControl(enabled bool) func(string, string, syscall.RawConn) error {
|
||
|
|
return func(_, _ string, rawConn syscall.RawConn) error {
|
||
|
|
var controlErr error
|
||
|
|
if err := rawConn.Control(func(fd uintptr) {
|
||
|
|
value := 0
|
||
|
|
if enabled {
|
||
|
|
value = 1
|
||
|
|
}
|
||
|
|
controlErr = unix.SetsockoptInt(int(fd), unix.IPPROTO_IPV6, unix.IPV6_V6ONLY, value)
|
||
|
|
}); err != nil {
|
||
|
|
return err
|
||
|
|
}
|
||
|
|
return controlErr
|
||
|
|
}
|
||
|
|
}
|