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