|  | // Copyright 2015 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. | 
|  |  | 
|  | //go:build cgo && !netgo && (aix || darwin || dragonfly || freebsd || hurd || netbsd || openbsd) | 
|  |  | 
|  | package net | 
|  |  | 
|  | /* | 
|  | #include <sys/types.h> | 
|  | #include <sys/socket.h> | 
|  |  | 
|  | #include <netinet/in.h> | 
|  | */ | 
|  |  | 
|  | import ( | 
|  | "syscall" | 
|  | "unsafe" | 
|  | ) | 
|  |  | 
|  | func cgoSockaddrInet4(ip IP) *syscall.RawSockaddr { | 
|  | sa := syscall.RawSockaddrInet4{Len: syscall.SizeofSockaddrInet4, Family: syscall.AF_INET} | 
|  | copy(sa.Addr[:], ip) | 
|  | return (*syscall.RawSockaddr)(unsafe.Pointer(&sa)) | 
|  | } | 
|  |  | 
|  | func cgoSockaddrInet6(ip IP, zone int) *syscall.RawSockaddr { | 
|  | sa := syscall.RawSockaddrInet6{Len: syscall.SizeofSockaddrInet6, Family: syscall.AF_INET6, Scope_id: uint32(zone)} | 
|  | copy(sa.Addr[:], ip) | 
|  | return (*syscall.RawSockaddr)(unsafe.Pointer(&sa)) | 
|  | } |