// 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. // +build cgo,!netgo // +build android freebsd dragonfly openbsd package net /* #include #include #include */ import ( "syscall" ) //extern getnameinfo func libc_getnameinfo(*syscall.RawSockaddr, syscall.Socklen_t, *byte, syscall.Size_t, *byte, syscall.Size_t, int) int func cgoNameinfoPTR(b []byte, sa *syscall.RawSockaddr, salen syscall.Socklen_t) (int, error) { syscall.Entersyscall() gerrno := libc_getnameinfo(sa, salen, &b[0], syscall.Size(len(b)), nil, 0, syscall.NI_NAMEREQD) syscall.Exitsyscall() var err error if gerrno == syscall.EAI_SYSTEM { errno := syscall.GetErrno() if errno != 0 { err = errno } } return gerrno, err }