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  }