github.com/axw/llgo@v0.0.0-20160805011314-95b5fe4dca20/third_party/gofrontend/libgo/go/net/cgo_resold.go (about)

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