]> Cypherpunks repositories - gostls13.git/commitdiff
syscall: add IPv6 scope zone ID support
authorMikio Hara <mikioh.mikioh@gmail.com>
Sun, 22 May 2011 17:09:07 +0000 (10:09 -0700)
committerBrad Fitzpatrick <bradfitz@golang.org>
Sun, 22 May 2011 17:09:07 +0000 (10:09 -0700)
R=golang-dev, bradfitz
CC=golang-dev
https://golang.org/cl/4515124

src/pkg/syscall/syscall_bsd.go
src/pkg/syscall/syscall_linux.go
src/pkg/syscall/syscall_windows.go

index 9f1244f134aaef98bf72bcc9ced680b7e58b2eca..766a56db56b5a42054157be32c7fe52e3e0d6e6a 100644 (file)
@@ -191,9 +191,10 @@ func (sa *SockaddrInet4) sockaddr() (uintptr, _Socklen, int) {
 }
 
 type SockaddrInet6 struct {
-       Port int
-       Addr [16]byte
-       raw  RawSockaddrInet6
+       Port   int
+       ZoneId uint32
+       Addr   [16]byte
+       raw    RawSockaddrInet6
 }
 
 func (sa *SockaddrInet6) sockaddr() (uintptr, _Socklen, int) {
@@ -205,6 +206,7 @@ func (sa *SockaddrInet6) sockaddr() (uintptr, _Socklen, int) {
        p := (*[2]byte)(unsafe.Pointer(&sa.raw.Port))
        p[0] = byte(sa.Port >> 8)
        p[1] = byte(sa.Port)
+       sa.raw.Scope_id = sa.ZoneId
        for i := 0; i < len(sa.Addr); i++ {
                sa.raw.Addr[i] = sa.Addr[i]
        }
@@ -297,6 +299,7 @@ func anyToSockaddr(rsa *RawSockaddrAny) (Sockaddr, int) {
                sa := new(SockaddrInet6)
                p := (*[2]byte)(unsafe.Pointer(&pp.Port))
                sa.Port = int(p[0])<<8 + int(p[1])
+               sa.ZoneId = pp.Scope_id
                for i := 0; i < len(sa.Addr); i++ {
                        sa.Addr[i] = pp.Addr[i]
                }
index 8e53068b7fc5c655baa514bb47fe41ab5330c097..9e9037ea149722a39cedbaa201fd4967e3af1c52 100644 (file)
@@ -219,9 +219,10 @@ func (sa *SockaddrInet4) sockaddr() (uintptr, _Socklen, int) {
 }
 
 type SockaddrInet6 struct {
-       Port int
-       Addr [16]byte
-       raw  RawSockaddrInet6
+       Port   int
+       ZoneId uint32
+       Addr   [16]byte
+       raw    RawSockaddrInet6
 }
 
 func (sa *SockaddrInet6) sockaddr() (uintptr, _Socklen, int) {
@@ -232,6 +233,7 @@ func (sa *SockaddrInet6) sockaddr() (uintptr, _Socklen, int) {
        p := (*[2]byte)(unsafe.Pointer(&sa.raw.Port))
        p[0] = byte(sa.Port >> 8)
        p[1] = byte(sa.Port)
+       sa.raw.Scope_id = sa.ZoneId
        for i := 0; i < len(sa.Addr); i++ {
                sa.raw.Addr[i] = sa.Addr[i]
        }
@@ -370,6 +372,7 @@ func anyToSockaddr(rsa *RawSockaddrAny) (Sockaddr, int) {
                sa := new(SockaddrInet6)
                p := (*[2]byte)(unsafe.Pointer(&pp.Port))
                sa.Port = int(p[0])<<8 + int(p[1])
+               sa.ZoneId = pp.Scope_id
                for i := 0; i < len(sa.Addr); i++ {
                        sa.Addr[i] = pp.Addr[i]
                }
index 48b3214753ec3c6b7529aeff4e8403c4119354e0..6ba031faf877ffe1ead07f56c49623888b0871c2 100644 (file)
@@ -536,8 +536,9 @@ func (sa *SockaddrInet4) sockaddr() (uintptr, int32, int) {
 }
 
 type SockaddrInet6 struct {
-       Port int
-       Addr [16]byte
+       Port   int
+       ZoneId uint32
+       Addr   [16]byte
 }
 
 func (sa *SockaddrInet6) sockaddr() (uintptr, int32, int) {