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