github.com/dylandreimerink/gobpfld@v0.6.1-0.20220205171531-e79c330ad608/internal/syscall/sockopt.go (about)

     1  package syscall
     2  
     3  import (
     4  	"unsafe"
     5  
     6  	"golang.org/x/sys/unix"
     7  )
     8  
     9  // Getsockopt is a public version of the unix.getsockopt without additional wrappers which allows us to use any
    10  // value type we want. But does require the usage of unsafe.
    11  func Getsockopt(s int, level int, name int, val unsafe.Pointer, vallen *Socklen) (err error) {
    12  	_, _, e1 := unix.Syscall6(
    13  		unix.SYS_GETSOCKOPT,
    14  		uintptr(s),
    15  		uintptr(level),
    16  		uintptr(name),
    17  		uintptr(val),
    18  		uintptr(unsafe.Pointer(vallen)),
    19  		0,
    20  	)
    21  	if e1 != 0 {
    22  		err = &Error{
    23  			Errno: e1,
    24  		}
    25  	}
    26  	return
    27  }
    28  
    29  // Setsockopt is a public version of the unix.setsockopt without additional wrappers which allows us to use any
    30  // value type we want. But does require the usage of unsafe.
    31  func Setsockopt(s int, level int, name int, val unsafe.Pointer, vallen uintptr) (err error) {
    32  	_, _, e1 := unix.Syscall6(
    33  		unix.SYS_SETSOCKOPT,
    34  		uintptr(s),
    35  		uintptr(level),
    36  		uintptr(name),
    37  		uintptr(val),
    38  		vallen,
    39  		0,
    40  	)
    41  	if e1 != 0 {
    42  		err = &Error{
    43  			Errno: e1,
    44  		}
    45  	}
    46  	return
    47  }