net: enable v4-over-v6 on ip sockets

Not all OS make that the default.
Can finally do this now that the syscall package
has the right definitions.

Fixes #679.

R=r
CC=golang-dev
https://golang.org/cl/2204048
This commit is contained in:
Russ Cox 2010-09-24 16:52:06 -04:00
parent b031b5cfde
commit d47266558d

View File

@ -38,6 +38,12 @@ func socket(net string, f, p, t int, la, ra syscall.Sockaddr, toAddr func(syscal
// Allow broadcast. // Allow broadcast.
syscall.SetsockoptInt(s, syscall.SOL_SOCKET, syscall.SO_BROADCAST, 1) syscall.SetsockoptInt(s, syscall.SOL_SOCKET, syscall.SO_BROADCAST, 1)
if f == syscall.AF_INET6 {
// using ip, tcp, udp, etc.
// allow both protocols even if the OS default is otherwise.
syscall.SetsockoptInt(s, syscall.IPPROTO_IPV6, syscall.IPV6_V6ONLY, 0)
}
if la != nil { if la != nil {
e = syscall.Bind(s, la) e = syscall.Bind(s, la)
if e != 0 { if e != 0 {