1// Copyright 2015 The Go Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style
3// license that can be found in the LICENSE file.
4
5//go:build cgo && !netgo && (aix || dragonfly || freebsd || netbsd || openbsd)
6
7package net
8
9/*
10#include <sys/types.h>
11#include <sys/socket.h>
12
13#include <netinet/in.h>
14*/
15import "C"
16
17import (
18	"syscall"
19	"unsafe"
20)
21
22func cgoSockaddrInet4(ip IP) *C.struct_sockaddr {
23	sa := syscall.RawSockaddrInet4{Len: syscall.SizeofSockaddrInet4, Family: syscall.AF_INET}
24	copy(sa.Addr[:], ip)
25	return (*C.struct_sockaddr)(unsafe.Pointer(&sa))
26}
27
28func cgoSockaddrInet6(ip IP, zone int) *C.struct_sockaddr {
29	sa := syscall.RawSockaddrInet6{Len: syscall.SizeofSockaddrInet6, Family: syscall.AF_INET6, Scope_id: uint32(zone)}
30	copy(sa.Addr[:], ip)
31	return (*C.struct_sockaddr)(unsafe.Pointer(&sa))
32}
33