From 80b5482ab2f26cf568d0fbcfc12b5a70faa63a22 Mon Sep 17 00:00:00 2001 From: Rob Pike Date: Thu, 14 May 2009 15:20:30 -0700 Subject: [PATCH] fix abstract unix domain sockets R=rsc DELTA=5 (3 added, 0 deleted, 2 changed) OCL=28845 CL=28849 --- src/lib/net/net_linux.go | 1 + src/lib/syscall/socket_linux.go | 3 ++- 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 90d6c245bd..4127867430 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 5fb3c9a9c2..f08fcca7ba 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 cbb65eeab0..58ffec00f8 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 -- 2.48.1