您最多选择25个主题 主题必须以字母或数字开头,可以包含连字符 (-),并且长度不得超过35个字符

70 行
1.5 KiB

  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. func probeProtocolStack() int {
  10. var p uintptr
  11. return int(unsafe.Sizeof(p))
  12. }
  13. const (
  14. sysAF_UNSPEC = 0x0
  15. sysAF_INET = 0x2
  16. sysAF_INET6 = 0x17
  17. sysSOCK_RAW = 0x3
  18. )
  19. type sockaddrInet struct {
  20. Family uint16
  21. Port uint16
  22. Addr [4]byte /* in_addr */
  23. Zero [8]uint8
  24. }
  25. type sockaddrInet6 struct {
  26. Family uint16
  27. Port uint16
  28. Flowinfo uint32
  29. Addr [16]byte /* in6_addr */
  30. Scope_id uint32
  31. }
  32. const (
  33. sizeofSockaddrInet = 0x10
  34. sizeofSockaddrInet6 = 0x1c
  35. )
  36. func getsockopt(s uintptr, level, name int, b []byte) (int, error) {
  37. l := uint32(len(b))
  38. err := syscall.Getsockopt(syscall.Handle(s), int32(level), int32(name), (*byte)(unsafe.Pointer(&b[0])), (*int32)(unsafe.Pointer(&l)))
  39. return int(l), err
  40. }
  41. func setsockopt(s uintptr, level, name int, b []byte) error {
  42. return syscall.Setsockopt(syscall.Handle(s), int32(level), int32(name), (*byte)(unsafe.Pointer(&b[0])), int32(len(b)))
  43. }
  44. func recvmsg(s uintptr, h *msghdr, flags int) (int, error) {
  45. return 0, errNotImplemented
  46. }
  47. func sendmsg(s uintptr, h *msghdr, flags int) (int, error) {
  48. return 0, errNotImplemented
  49. }
  50. func recvmmsg(s uintptr, hs []mmsghdr, flags int) (int, error) {
  51. return 0, errNotImplemented
  52. }
  53. func sendmmsg(s uintptr, hs []mmsghdr, flags int) (int, error) {
  54. return 0, errNotImplemented
  55. }