mirror of
https://github.com/golang/go.git
synced 2025-12-08 06:10:04 +00:00
net: enable SO_REUSEADDR, SO_REUSEPORT options on stream, multicast listeners only
This CL changes default SOL_SOCKET settings to mitigate connect failure on OpenBSD or similar platforms which support randomized transport protocol port number assignment. Fixes #2830. R=rsc, jsing CC=golang-dev https://golang.org/cl/5648044
This commit is contained in:
parent
21a3aceb4a
commit
0e3514eaac
6 changed files with 44 additions and 33 deletions
|
|
@ -18,23 +18,20 @@ func setDefaultSockopts(s, f, t int) error {
|
|||
// Note that some operating systems never admit this option.
|
||||
syscall.SetsockoptInt(s, syscall.IPPROTO_IPV6, syscall.IPV6_V6ONLY, 0)
|
||||
}
|
||||
|
||||
if f == syscall.AF_UNIX ||
|
||||
(f == syscall.AF_INET || f == syscall.AF_INET6) && t == syscall.SOCK_STREAM {
|
||||
// Allow reuse of recently-used addresses.
|
||||
err := syscall.SetsockoptInt(s, syscall.SOL_SOCKET, syscall.SO_REUSEADDR, 1)
|
||||
if err != nil {
|
||||
return os.NewSyscallError("setsockopt", err)
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
// Allow broadcast.
|
||||
err := syscall.SetsockoptInt(s, syscall.SOL_SOCKET, syscall.SO_BROADCAST, 1)
|
||||
if err != nil {
|
||||
return os.NewSyscallError("setsockopt", err)
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
func setDefaultListenerSockopts(s int) error {
|
||||
// Allow reuse of recently-used addresses.
|
||||
err := syscall.SetsockoptInt(s, syscall.SOL_SOCKET, syscall.SO_REUSEADDR, 1)
|
||||
if err != nil {
|
||||
return os.NewSyscallError("setsockopt", err)
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue