github.com/dylandreimerink/gobpfld@v0.6.1-0.20220205171531-e79c330ad608/internal/syscall/sendto.go (about) 1 package syscall 2 3 import ( 4 "unsafe" 5 6 "golang.org/x/sys/unix" 7 ) 8 9 // Zero single-word zero for use when we need a valid pointer to 0 bytes. 10 // See mkunix.pl. 11 var Zero uintptr 12 13 // Sendto is a public version of the unix.sendto without additional wrappers which allows us to use any 14 // value type we want. But does require the usage of unsafe. 15 func Sendto(s int, buf []byte, flags int, to unsafe.Pointer, addrlen Socklen) (err error) { 16 var _p0 unsafe.Pointer 17 if len(buf) > 0 { 18 _p0 = unsafe.Pointer(&buf[0]) 19 } else { 20 _p0 = unsafe.Pointer(&Zero) 21 } 22 _, _, e1 := unix.Syscall6( 23 unix.SYS_SENDTO, 24 uintptr(s), 25 uintptr(_p0), 26 uintptr(len(buf)), 27 uintptr(flags), 28 uintptr(to), 29 uintptr(addrlen), 30 ) 31 if e1 != 0 { 32 err = &Error{ 33 Errno: e1, 34 } 35 } 36 return 37 }