summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRob Pike <r@golang.org>2009-05-14 15:20:30 -0700
committerRob Pike <r@golang.org>2009-05-14 15:20:30 -0700
commit4d83e9290903c3f2ab75ae9e5c6d77fa5025bbc8 (patch)
tree246cbd57a8e93d870b3531640ed6a6e35c7d4c1b
parent033dc3d8c31df556fec6b5936cac7984b0a2c6de (diff)
downloadgolang-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.go1
-rw-r--r--src/lib/syscall/socket_linux.go3
-rw-r--r--src/lib/syscall/types_amd64_linux.go3
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