cgo_socknew.go 750 B

12345678910111213141516171819202122232425262728293031
  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. //go:build cgo && !netgo && (android || linux || solaris)
  5. package net
  6. /*
  7. #include <sys/types.h>
  8. #include <sys/socket.h>
  9. #include <netinet/in.h>
  10. */
  11. import (
  12. "syscall"
  13. "unsafe"
  14. )
  15. func cgoSockaddrInet4(ip IP) *syscall.RawSockaddr {
  16. sa := syscall.RawSockaddrInet4{Family: syscall.AF_INET}
  17. copy(sa.Addr[:], ip)
  18. return (*syscall.RawSockaddr)(unsafe.Pointer(&sa))
  19. }
  20. func cgoSockaddrInet6(ip IP, zone int) *syscall.RawSockaddr {
  21. sa := syscall.RawSockaddrInet6{Family: syscall.AF_INET6, Scope_id: uint32(zone)}
  22. copy(sa.Addr[:], ip)
  23. return (*syscall.RawSockaddr)(unsafe.Pointer(&sa))
  24. }