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  }