1 // socket_bsd.go -- Socket handling specific to *BSD based systems.
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.
9 const SizeofSockaddrInet4
= 16
10 const SizeofSockaddrInet6
= 28
11 const SizeofSockaddrUnix
= 110
13 type RawSockaddrInet4
struct {
17 Addr
[4]byte /* in_addr */
21 func (sa
*RawSockaddrInet4
) setLen() Socklen_t
{
22 sa
.Len
= SizeofSockaddrInet4
23 return SizeofSockaddrInet4
26 type RawSockaddrInet6
struct {
31 Addr
[16]byte /* in6_addr */
35 func (sa
*RawSockaddrInet6
) setLen() Socklen_t
{
36 sa
.Len
= SizeofSockaddrInet6
37 return SizeofSockaddrInet6
40 type RawSockaddrUnix
struct {
46 func (sa
*RawSockaddrUnix
) setLen(n
int) {
47 sa
.Len
= uint8(3 + n
) // 2 for Family, Len; 1 for NUL.
50 func (sa
*RawSockaddrUnix
) getLen() (int, error
) {
51 if sa
.Len
< 3 || sa
.Len
> SizeofSockaddrUnix
{
54 n
:= int(sa
.Len
) - 3 // subtract leading Family, Len, terminating NUL.
55 for i
:= 0; i
< n
; i
++ {
57 // found early NUL; assume Len is overestimating.
65 func (sa
*RawSockaddrUnix
) adjustAbstract(sl Socklen_t
) Socklen_t
{
69 type RawSockaddr
struct {
75 // BindToDevice binds the socket associated with fd to device.
76 func BindToDevice(fd
int, device
string) (err error
) {
80 func anyToSockaddrOS(rsa
*RawSockaddrAny
) (Sockaddr
, error
) {
81 return nil, EAFNOSUPPORT