diff --git a/src/lib/net/net_linux.go b/src/lib/net/net_linux.go index 90d6c245bd3..4127867430a 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 5fb3c9a9c2d..f08fcca7ba2 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 cbb65eeab06..58ffec00f8a 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