diff options
| author | Russ Cox <rsc@golang.org> | 2009-05-13 18:03:41 -0700 | 
|---|---|---|
| committer | Russ Cox <rsc@golang.org> | 2009-05-13 18:03:41 -0700 | 
| commit | 12bab4cf81276e12324517e0943c26414aa3dcd0 (patch) | |
| tree | 37103bd4ffc93204aed44061fcabd4f01da42461 /src/lib/net/net_darwin.go | |
| parent | a3a5f024752e2f98a5c2396773175988259b1f0f (diff) | |
| download | golang-12bab4cf81276e12324517e0943c26414aa3dcd0.tar.gz | |
Unix domain socket support, Linux and Darwin.
R=r
DELTA=534  (353 added, 99 deleted, 82 changed)
OCL=28783
CL=28783
Diffstat (limited to 'src/lib/net/net_darwin.go')
| -rw-r--r-- | src/lib/net/net_darwin.go | 30 | 
1 files changed, 29 insertions, 1 deletions
| diff --git a/src/lib/net/net_darwin.go b/src/lib/net/net_darwin.go index 2419f6c6d..50e19d614 100644 --- a/src/lib/net/net_darwin.go +++ b/src/lib/net/net_darwin.go @@ -43,7 +43,6 @@ func v6ToSockaddr(p IP, port int) (sa1 *syscall.Sockaddr, err os.Error) {  	return (*syscall.Sockaddr)(unsafe.Pointer(sa)), nil  } -  func sockaddrToIP(sa1 *syscall.Sockaddr) (p IP, port int, err os.Error) {  	switch sa1.Family {  	case syscall.AF_INET: @@ -70,3 +69,32 @@ func listenBacklog() int64 {  	return syscall.SOMAXCONN  } +func unixToSockaddr(name string) (sa1 *syscall.Sockaddr, err os.Error) { +	sa := new(syscall.SockaddrUnix); +	n := len(name); +	if n >= len(sa.Path) || n == 0 { +		return nil, os.EINVAL; +	} +	sa.Len = byte(3 + n);	// 2 for Family, Len; 1 for NUL +	sa.Family = syscall.AF_UNIX; +	for i := 0; i < len(name); i++ { +		sa.Path[i] = name[i]; +	} +	return (*syscall.Sockaddr)(unsafe.Pointer(sa)), nil; +} + +func sockaddrToUnix(sa1 *syscall.Sockaddr) (string, os.Error) { +	if sa1.Family != syscall.AF_UNIX || sa1.Len < 3 || sa1.Len > syscall.SizeofSockaddrUnix { +		return "", os.EINVAL; +	} +	sa := (*syscall.SockaddrUnix)(unsafe.Pointer(sa1)); +	n := int(sa.Len) - 3;	// subtract leading Family, Len, terminating NUL +	for i := 0; i < n; i++ { +		if sa.Path[i] == 0 { +			// found early NUL; assume Len is overestimating +			n = i; +			break; +		} +	} +	return string(sa.Path[0:n]), nil; +} | 
