Commit bd8e25ca authored by Russ Cox's avatar Russ Cox

auto-detect whether to use IPv6 or IPv4 kernel interface

R=r
DELTA=12  (9 added, 0 deleted, 3 changed)
OCL=28096
CL=28118
parent 10817ab9
...@@ -300,9 +300,18 @@ func (c *connBase) SetLinger(sec int) os.Error { ...@@ -300,9 +300,18 @@ func (c *connBase) SetLinger(sec int) os.Error {
// only dealing with IPv4 sockets? As long as the host system // only dealing with IPv4 sockets? As long as the host system
// understands IPv6, it's okay to pass IPv4 addresses to the IPv6 // understands IPv6, it's okay to pass IPv4 addresses to the IPv6
// interface. That simplifies our code and is most general. // interface. That simplifies our code and is most general.
// If we need to build on a system without IPv6 support, setting // Unfortunately, we need to run on kernels built without IPv6 support too.
// preferIPv4 here should fall back to the IPv4 socket interface when possible. // So probe the kernel to figure it out.
const preferIPv4 = false func kernelSupportsIPv6() bool {
fd, e := syscall.Socket(syscall.AF_INET6, syscall.SOCK_STREAM, syscall.IPPROTO_TCP);
if fd >= 0 {
syscall.Close(fd)
}
return e == 0
}
var preferIPv4 = !kernelSupportsIPv6()
func internetSocket(net, laddr, raddr string, proto int64, mode string) func internetSocket(net, laddr, raddr string, proto int64, mode string)
(fd *netFD, err os.Error) (fd *netFD, err os.Error)
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment