conn_windows.go 824 B

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