github.com/llvm-mirror/llgo@v0.0.0-20190322182713-bf6f0a60fce1/third_party/gofrontend/libgo/go/syscall/socket_bsd.go (about) 1 // socket_bsd.go -- Socket handling specific to *BSD based systems. 2 3 // Copyright 2010 The Go Authors. All rights reserved. 4 // Use of this source code is governed by a BSD-style 5 // license that can be found in the LICENSE file. 6 7 package syscall 8 9 const SizeofSockaddrInet4 = 16 10 const SizeofSockaddrInet6 = 28 11 const SizeofSockaddrUnix = 110 12 13 type RawSockaddrInet4 struct { 14 Len uint8 15 Family uint8 16 Port uint16 17 Addr [4]byte /* in_addr */ 18 Zero [8]uint8 19 } 20 21 func (sa *RawSockaddrInet4) setLen() Socklen_t { 22 sa.Len = SizeofSockaddrInet4 23 return SizeofSockaddrInet4 24 } 25 26 type RawSockaddrInet6 struct { 27 Len uint8 28 Family uint8 29 Port uint16 30 Flowinfo uint32 31 Addr [16]byte /* in6_addr */ 32 Scope_id uint32 33 } 34 35 func (sa *RawSockaddrInet6) setLen() Socklen_t { 36 sa.Len = SizeofSockaddrInet6 37 return SizeofSockaddrInet6 38 } 39 40 type RawSockaddrUnix struct { 41 Len uint8 42 Family uint8 43 Path [108]int8 44 } 45 46 func (sa *RawSockaddrUnix) setLen(n int) { 47 sa.Len = uint8(3 + n) // 2 for Family, Len; 1 for NUL. 48 } 49 50 func (sa *RawSockaddrUnix) getLen() (int, error) { 51 if sa.Len < 3 || sa.Len > SizeofSockaddrUnix { 52 return 0, EINVAL 53 } 54 n := int(sa.Len) - 3 // subtract leading Family, Len, terminating NUL. 55 for i := 0; i < n; i++ { 56 if sa.Path[i] == 0 { 57 // found early NUL; assume Len is overestimating. 58 n = i 59 break 60 } 61 } 62 return n, nil 63 } 64 65 func (sa *RawSockaddrUnix) adjustAbstract(sl Socklen_t) Socklen_t { 66 return sl 67 } 68 69 type RawSockaddr struct { 70 Len uint8 71 Family uint8 72 Data [14]int8 73 } 74 75 // BindToDevice binds the socket associated with fd to device. 76 func BindToDevice(fd int, device string) (err error) { 77 return ENOSYS 78 } 79 80 func anyToSockaddrOS(rsa *RawSockaddrAny) (Sockaddr, error) { 81 return nil, EAFNOSUPPORT 82 }