30 lines
736 B
Go
30 lines
736 B
Go
|
//go:build !windows && !wasm
|
||
|
|
||
|
package torrent
|
||
|
|
||
|
import (
|
||
|
"syscall"
|
||
|
|
||
|
"golang.org/x/sys/unix"
|
||
|
)
|
||
|
|
||
|
func setReusePortSockOpts(fd uintptr) (err error) {
|
||
|
// I would use libp2p/go-reuseport to do this here, but no surprise it's
|
||
|
// implemented incorrectly.
|
||
|
|
||
|
// Looks like we can get away with just REUSEPORT at least on Darwin, and probably by
|
||
|
// extension BSDs and Linux.
|
||
|
if false {
|
||
|
err = syscall.SetsockoptInt(int(fd), syscall.SOL_SOCKET, syscall.SO_REUSEADDR, 1)
|
||
|
if err != nil {
|
||
|
return
|
||
|
}
|
||
|
}
|
||
|
err = syscall.SetsockoptInt(int(fd), syscall.SOL_SOCKET, unix.SO_REUSEPORT, 1)
|
||
|
return
|
||
|
}
|
||
|
|
||
|
func setSockNoLinger(fd uintptr) (err error) {
|
||
|
return syscall.SetsockoptLinger(int(fd), syscall.SOL_SOCKET, syscall.SO_LINGER, &lingerOffVal)
|
||
|
}
|