1// +build windows
2
3package quic
4
5import (
6	"errors"
7	"fmt"
8	"net"
9	"syscall"
10
11	"golang.org/x/sys/windows"
12)
13
14func newConn(c net.PacketConn) (connection, error) {
15	return &basicConn{PacketConn: c}, nil
16}
17
18func inspectReadBuffer(c net.PacketConn) (int, error) {
19	conn, ok := c.(interface {
20		SyscallConn() (syscall.RawConn, error)
21	})
22	if !ok {
23		return 0, errors.New("doesn't have a SyscallConn")
24	}
25	rawConn, err := conn.SyscallConn()
26	if err != nil {
27		return 0, fmt.Errorf("couldn't get syscall.RawConn: %w", err)
28	}
29	var size int
30	var serr error
31	if err := rawConn.Control(func(fd uintptr) {
32		size, serr = windows.GetsockoptInt(windows.Handle(fd), syscall.SOL_SOCKET, syscall.SO_RCVBUF)
33	}); err != nil {
34		return 0, err
35	}
36	return size, serr
37}
38