github.com/AndrienkoAleksandr/go@v0.0.19/src/intern/syscall/unix/net_darwin.go (about) 1 // Copyright 2022 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 package unix 6 7 import ( 8 "internal/abi" 9 "syscall" 10 "unsafe" 11 ) 12 13 const ( 14 AI_CANONNAME = 0x2 15 AI_ALL = 0x100 16 AI_V4MAPPED = 0x800 17 AI_MASK = 0x1407 18 19 EAI_AGAIN = 2 20 EAI_NODATA = 7 21 EAI_NONAME = 8 22 EAI_SYSTEM = 11 23 EAI_OVERFLOW = 14 24 25 NI_NAMEREQD = 4 26 ) 27 28 type Addrinfo struct { 29 Flags int32 30 Family int32 31 Socktype int32 32 Protocol int32 33 Addrlen uint32 34 Canonname *byte 35 Addr *syscall.RawSockaddr 36 Next *Addrinfo 37 } 38 39 //go:cgo_ldflag "-lresolv" 40 41 //go:cgo_import_dynamic libc_getaddrinfo getaddrinfo "/usr/lib/libSystem.B.dylib" 42 func libc_getaddrinfo_trampoline() 43 44 func Getaddrinfo(hostname, servname *byte, hints *Addrinfo, res **Addrinfo) (int, error) { 45 gerrno, _, errno := syscall_syscall6(abi.FuncPCABI0(libc_getaddrinfo_trampoline), 46 uintptr(unsafe.Pointer(hostname)), 47 uintptr(unsafe.Pointer(servname)), 48 uintptr(unsafe.Pointer(hints)), 49 uintptr(unsafe.Pointer(res)), 50 0, 51 0) 52 var err error 53 if errno != 0 { 54 err = errno 55 } 56 return int(gerrno), err 57 } 58 59 //go:cgo_import_dynamic libc_freeaddrinfo freeaddrinfo "/usr/lib/libSystem.B.dylib" 60 func libc_freeaddrinfo_trampoline() 61 62 func Freeaddrinfo(ai *Addrinfo) { 63 syscall_syscall6(abi.FuncPCABI0(libc_freeaddrinfo_trampoline), 64 uintptr(unsafe.Pointer(ai)), 65 0, 0, 0, 0, 0) 66 } 67 68 //go:cgo_import_dynamic libc_getnameinfo getnameinfo "/usr/lib/libSystem.B.dylib" 69 func libc_getnameinfo_trampoline() 70 71 func Getnameinfo(sa *syscall.RawSockaddr, salen int, host *byte, hostlen int, serv *byte, servlen int, flags int) (int, error) { 72 gerrno, _, errno := syscall_syscall9(abi.FuncPCABI0(libc_getnameinfo_trampoline), 73 uintptr(unsafe.Pointer(sa)), 74 uintptr(salen), 75 uintptr(unsafe.Pointer(host)), 76 uintptr(hostlen), 77 uintptr(unsafe.Pointer(serv)), 78 uintptr(servlen), 79 uintptr(flags), 80 0, 81 0) 82 var err error 83 if errno != 0 { 84 err = errno 85 } 86 return int(gerrno), err 87 } 88 89 //go:cgo_import_dynamic libc_gai_strerror gai_strerror "/usr/lib/libSystem.B.dylib" 90 func libc_gai_strerror_trampoline() 91 92 func GaiStrerror(ecode int) string { 93 r1, _, _ := syscall_syscall(abi.FuncPCABI0(libc_gai_strerror_trampoline), 94 uintptr(ecode), 95 0, 0) 96 return GoString((*byte)(unsafe.Pointer(r1))) 97 } 98 99 // Implemented in the runtime package. 100 func gostring(*byte) string 101 102 func GoString(p *byte) string { 103 return gostring(p) 104 } 105 106 //go:linkname syscall_syscall syscall.syscall 107 func syscall_syscall(fn, a1, a2, a3 uintptr) (r1, r2 uintptr, err syscall.Errno) 108 109 //go:linkname syscall_syscallPtr syscall.syscallPtr 110 func syscall_syscallPtr(fn, a1, a2, a3 uintptr) (r1, r2 uintptr, err syscall.Errno) 111 112 //go:linkname syscall_syscall6 syscall.syscall6 113 func syscall_syscall6(fn, a1, a2, a3, a4, a5, a6 uintptr) (r1, r2 uintptr, err syscall.Errno) 114 115 //go:linkname syscall_syscall6X syscall.syscall6X 116 func syscall_syscall6X(fn, a1, a2, a3, a4, a5, a6 uintptr) (r1, r2 uintptr, err syscall.Errno) 117 118 //go:linkname syscall_syscall9 syscall.syscall9 119 func syscall_syscall9(fn, a1, a2, a3, a4, a5, a6, a7, a8, a9 uintptr) (r1, r2 uintptr, err syscall.Errno) 120 121 type ResState struct { 122 unexported [69]uintptr 123 } 124 125 //go:cgo_import_dynamic libresolv_res_9_ninit res_9_ninit "/usr/lib/libresolv.9.dylib" 126 func libresolv_res_9_ninit_trampoline() 127 128 func ResNinit(state *ResState) error { 129 _, _, errno := syscall_syscall(abi.FuncPCABI0(libresolv_res_9_ninit_trampoline), 130 uintptr(unsafe.Pointer(state)), 131 0, 0) 132 if errno != 0 { 133 return errno 134 } 135 return nil 136 } 137 138 //go:cgo_import_dynamic libresolv_res_9_nclose res_9_nclose "/usr/lib/libresolv.9.dylib" 139 func libresolv_res_9_nclose_trampoline() 140 141 func ResNclose(state *ResState) { 142 syscall_syscall(abi.FuncPCABI0(libresolv_res_9_nclose_trampoline), 143 uintptr(unsafe.Pointer(state)), 144 0, 0) 145 } 146 147 //go:cgo_import_dynamic libresolv_res_9_nsearch res_9_nsearch "/usr/lib/libresolv.9.dylib" 148 func libresolv_res_9_nsearch_trampoline() 149 150 func ResNsearch(state *ResState, dname *byte, class, typ int, ans *byte, anslen int) (int, error) { 151 r1, _, errno := syscall_syscall6(abi.FuncPCABI0(libresolv_res_9_nsearch_trampoline), 152 uintptr(unsafe.Pointer(state)), 153 uintptr(unsafe.Pointer(dname)), 154 uintptr(class), 155 uintptr(typ), 156 uintptr(unsafe.Pointer(ans)), 157 uintptr(anslen)) 158 if errno != 0 { 159 return 0, errno 160 } 161 return int(int32(r1)), nil 162 }