blob: 54a470ebe343536701dafb5d06b15be6def82d28 [file] [log] [blame]
David K. Bainbridge215e0242017-09-05 23:18:24 -07001// 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
5package socket
6
7import (
8 "errors"
9 "syscall"
10 "unsafe"
11)
12
13func probeProtocolStack() int {
14 var p uintptr
15 return int(unsafe.Sizeof(p))
16}
17
18const (
19 sysAF_UNSPEC = 0x0
20 sysAF_INET = 0x2
21 sysAF_INET6 = 0x17
22
23 sysSOCK_RAW = 0x3
24)
25
26type sockaddrInet struct {
27 Family uint16
28 Port uint16
29 Addr [4]byte /* in_addr */
30 Zero [8]uint8
31}
32
33type sockaddrInet6 struct {
34 Family uint16
35 Port uint16
36 Flowinfo uint32
37 Addr [16]byte /* in6_addr */
38 Scope_id uint32
39}
40
41const (
42 sizeofSockaddrInet = 0x10
43 sizeofSockaddrInet6 = 0x1c
44)
45
46func getsockopt(s uintptr, level, name int, b []byte) (int, error) {
47 l := uint32(len(b))
48 err := syscall.Getsockopt(syscall.Handle(s), int32(level), int32(name), (*byte)(unsafe.Pointer(&b[0])), (*int32)(unsafe.Pointer(&l)))
49 return int(l), err
50}
51
52func setsockopt(s uintptr, level, name int, b []byte) error {
53 return syscall.Setsockopt(syscall.Handle(s), int32(level), int32(name), (*byte)(unsafe.Pointer(&b[0])), int32(len(b)))
54}
55
56func recvmsg(s uintptr, h *msghdr, flags int) (int, error) {
57 return 0, errors.New("not implemented")
58}
59
60func sendmsg(s uintptr, h *msghdr, flags int) (int, error) {
61 return 0, errors.New("not implemented")
62}
63
64func recvmmsg(s uintptr, hs []mmsghdr, flags int) (int, error) {
65 return 0, errors.New("not implemented")
66}
67
68func sendmmsg(s uintptr, hs []mmsghdr, flags int) (int, error) {
69 return 0, errors.New("not implemented")
70}