cgo_resold.go 865 B

1234567891011121314151617181920212223242526272829303132333435
  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 || freebsd || dragonfly || openbsd)
  5. package net
  6. /*
  7. #include <sys/types.h>
  8. #include <sys/socket.h>
  9. #include <netdb.h>
  10. */
  11. import (
  12. "syscall"
  13. )
  14. //extern getnameinfo
  15. func libc_getnameinfo(*syscall.RawSockaddr, syscall.Socklen_t, *byte, syscall.Size_t, *byte, syscall.Size_t, int) int
  16. func cgoNameinfoPTR(b []byte, sa *syscall.RawSockaddr, salen syscall.Socklen_t) (int, error) {
  17. syscall.Entersyscall()
  18. gerrno := libc_getnameinfo(sa, salen, &b[0], syscall.Size(len(b)), nil, 0, syscall.NI_NAMEREQD)
  19. syscall.Exitsyscall()
  20. var err error
  21. if gerrno == syscall.EAI_SYSTEM {
  22. errno := syscall.GetErrno()
  23. if errno != 0 {
  24. err = errno
  25. }
  26. }
  27. return gerrno, err
  28. }