diff options
| author | Rob Pike <r@golang.org> | 2009-05-14 15:20:30 -0700 |
|---|---|---|
| committer | Rob Pike <r@golang.org> | 2009-05-14 15:20:30 -0700 |
| commit | 4d83e9290903c3f2ab75ae9e5c6d77fa5025bbc8 (patch) | |
| tree | 246cbd57a8e93d870b3531640ed6a6e35c7d4c1b | |
| parent | 033dc3d8c31df556fec6b5936cac7984b0a2c6de (diff) | |
| download | golang-4d83e9290903c3f2ab75ae9e5c6d77fa5025bbc8.tar.gz | |
fix abstract unix domain sockets
R=rsc
DELTA=5 (3 added, 0 deleted, 2 changed)
OCL=28845
CL=28849
| -rw-r--r-- | src/lib/net/net_linux.go | 1 | ||||
| -rw-r--r-- | src/lib/syscall/socket_linux.go | 3 | ||||
| -rw-r--r-- | src/lib/syscall/types_amd64_linux.go | 3 |
3 files changed, 5 insertions, 2 deletions
diff --git a/src/lib/net/net_linux.go b/src/lib/net/net_linux.go index 90d6c245b..412786743 100644 --- a/src/lib/net/net_linux.go +++ b/src/lib/net/net_linux.go @@ -95,6 +95,7 @@ func unixToSockaddr(name string) (sa1 *syscall.Sockaddr, err os.Error) { if sa.Path[0] == '@' { sa.Path[0] = 0; } + sa.Length = 1 + int64(n) + 1; // family, name, \0 return (*syscall.Sockaddr)(unsafe.Pointer(sa)), nil; } diff --git a/src/lib/syscall/socket_linux.go b/src/lib/syscall/socket_linux.go index 5fb3c9a9c..f08fcca7b 100644 --- a/src/lib/syscall/socket_linux.go +++ b/src/lib/syscall/socket_linux.go @@ -19,7 +19,8 @@ var SocketDisableIPv6 bool func saLen(s *Sockaddr) int64 { switch s.Family { case AF_UNIX: - return SizeofSockaddrUnix; + sa := (*SockaddrUnix)(unsafe.Pointer(s)); + return sa.Length; case AF_INET: return SizeofSockaddrInet4; case AF_INET6: diff --git a/src/lib/syscall/types_amd64_linux.go b/src/lib/syscall/types_amd64_linux.go index cbb65eeab..58ffec00f 100644 --- a/src/lib/syscall/types_amd64_linux.go +++ b/src/lib/syscall/types_amd64_linux.go @@ -166,7 +166,8 @@ const ( type SockaddrUnix struct { Family uint16; - Path [108]byte + Path [108]byte; + Length int64; // Not part of the kernel structure; used internally } const SizeofSockaddrUnix = 110 |
