aboutsummaryrefslogtreecommitdiff
path: root/libgo/syscalls/socket_solaris.go
diff options
context:
space:
mode:
authorIan Lance Taylor <ian@gcc.gnu.org>2011-01-13 05:17:52 +0000
committerIan Lance Taylor <ian@gcc.gnu.org>2011-01-13 05:17:52 +0000
commitcff0c39da10717bec95ae9b1d57d05645f91dea9 (patch)
treee9602dee09986866e66e3bee32d69f8c5d57bf78 /libgo/syscalls/socket_solaris.go
parent243ffa47b314724dc9f5c0484e999243c4a25da9 (diff)
downloadgcc-cff0c39da10717bec95ae9b1d57d05645f91dea9.zip
gcc-cff0c39da10717bec95ae9b1d57d05645f91dea9.tar.gz
gcc-cff0c39da10717bec95ae9b1d57d05645f91dea9.tar.bz2
Clean up syscalls, add some Solaris support.
From-SVN: r168738
Diffstat (limited to 'libgo/syscalls/socket_solaris.go')
-rw-r--r--libgo/syscalls/socket_solaris.go76
1 files changed, 76 insertions, 0 deletions
diff --git a/libgo/syscalls/socket_solaris.go b/libgo/syscalls/socket_solaris.go
new file mode 100644
index 0000000..13fe727
--- /dev/null
+++ b/libgo/syscalls/socket_solaris.go
@@ -0,0 +1,76 @@
+// socket_solaris.go -- Socket handling specific to Solaris.
+
+// Copyright 2010 The Go Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+package syscall
+
+const SizeofSockaddrInet4 = 16
+const SizeofSockaddrInet6 = 32
+const SizeofSockaddrUnix = 110
+
+type RawSockaddrInet4 struct {
+ Family uint16
+ Port uint16
+ Addr [4]byte /* in_addr */
+ Zero [8]uint8
+}
+
+func (sa *RawSockaddrInet4) setLen() Socklen_t {
+ return SizeofSockaddrInet4
+}
+
+type RawSockaddrInet6 struct {
+ Family uint16
+ Port uint16
+ Flowinfo uint32
+ Addr [16]byte /* in6_addr */
+ Scope_id uint32
+ Src_id uint32
+}
+
+func (sa *RawSockaddrInet6) setLen() Socklen_t {
+ return SizeofSockaddrInet6
+}
+
+type RawSockaddrUnix struct {
+ Family uint16
+ Path [108]int8
+}
+
+func (sa *RawSockaddrUnix) setLen(int) {
+}
+
+func (sa *RawSockaddrUnix) getLen() (int, int) {
+ if sa.Path[0] == 0 {
+ // "Abstract" Unix domain socket.
+ // Rewrite leading NUL as @ for textual display.
+ // (This is the standard convention.)
+ // Not friendly to overwrite in place,
+ // but the callers below don't care.
+ sa.Path[0] = '@'
+ }
+
+ // Assume path ends at NUL.
+ // This is not technically the Linux semantics for
+ // abstract Unix domain sockets--they are supposed
+ // to be uninterpreted fixed-size binary blobs--but
+ // everyone uses this convention.
+ n := 0
+ for n < len(sa.Path) - 3 && sa.Path[n] != 0 {
+ n++
+ }
+
+ return n, 0
+}
+
+type RawSockaddr struct {
+ Family uint16
+ Data [14]int8
+}
+
+// BindToDevice binds the socket associated with fd to device.
+func BindToDevice(fd int, device string) (errno int) {
+ return ENOSYS
+}