sys_linux_386.go 899 B

1234567891011121314151617181920212223242526272829
  1. // Copyright 2017 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. package socket
  5. import (
  6. "syscall"
  7. "unsafe"
  8. )
  9. const (
  10. sysSETSOCKOPT = 0xe
  11. sysGETSOCKOPT = 0xf
  12. )
  13. func socketcall(call, a0, a1, a2, a3, a4, a5 uintptr) (uintptr, syscall.Errno)
  14. func rawsocketcall(call, a0, a1, a2, a3, a4, a5 uintptr) (uintptr, syscall.Errno)
  15. func getsockopt(s uintptr, level, name int, b []byte) (int, error) {
  16. l := uint32(len(b))
  17. _, errno := socketcall(sysGETSOCKOPT, s, uintptr(level), uintptr(name), uintptr(unsafe.Pointer(&b[0])), uintptr(unsafe.Pointer(&l)), 0)
  18. return int(l), errnoErr(errno)
  19. }
  20. func setsockopt(s uintptr, level, name int, b []byte) error {
  21. _, errno := socketcall(sysSETSOCKOPT, s, uintptr(level), uintptr(name), uintptr(unsafe.Pointer(&b[0])), uintptr(len(b)), 0)
  22. return errnoErr(errno)
  23. }