From: Mikio Hara Date: Sat, 30 Mar 2013 06:21:22 +0000 (+0900) Subject: net: avoid use of listener socket options on active open sockets X-Git-Tag: go1.1rc2~261 X-Git-Url: http://www.git.cypherpunks.su/?a=commitdiff_plain;h=4b7bf73c4b4f46603d4d89a103d1f797f90bc09e;p=gostls13.git net: avoid use of listener socket options on active open sockets This CL ensures we use the correct socket options for passive and active open sockets. For the passive open sockets created by Listen functions, additional SO_REUSEADDR, SO_REUSEPORT options are required for the quick service restart and/or multicasting. For the active open sockets created by Dial functions, no additional options are required. R=golang-dev, dave, bradfitz, rsc CC=golang-dev https://golang.org/cl/7795050 --- diff --git a/src/pkg/net/sock_posix.go b/src/pkg/net/sock_posix.go index c8a94f5047..e2487c805e 100644 --- a/src/pkg/net/sock_posix.go +++ b/src/pkg/net/sock_posix.go @@ -25,7 +25,8 @@ func socket(net string, f, t, p int, ipv6only bool, ulsa, ursa syscall.Sockaddr, return nil, err } - if ulsa != nil { + // This socket is used by a listener. + if ulsa != nil && ursa == nil { // We provide a socket that listens to a wildcard // address with reusable UDP port when the given ulsa // is an appropriate UDP multicast address prefix. @@ -37,6 +38,9 @@ func socket(net string, f, t, p int, ipv6only bool, ulsa, ursa syscall.Sockaddr, closesocket(s) return nil, err } + } + + if ulsa != nil { if err = syscall.Bind(s, ulsa); err != nil { closesocket(s) return nil, err @@ -48,6 +52,7 @@ func socket(net string, f, t, p int, ipv6only bool, ulsa, ursa syscall.Sockaddr, return nil, err } + // This socket is used by a dialer. if ursa != nil { if !deadline.IsZero() { setWriteDeadline(fd, deadline)