]> Cypherpunks repositories - gostls13.git/commitdiff
net: avoid use of listener socket options on active open sockets
authorMikio Hara <mikioh.mikioh@gmail.com>
Sat, 30 Mar 2013 06:21:22 +0000 (15:21 +0900)
committerMikio Hara <mikioh.mikioh@gmail.com>
Sat, 30 Mar 2013 06:21:22 +0000 (15:21 +0900)
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

src/pkg/net/sock_posix.go

index c8a94f50473a4ea24543c0351c4946cef07cfffa..e2487c805e985a2074a7ebf68d499bc3c09fb2fe 100644 (file)
@@ -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)