internal/socket: use interface not type assertions to infer a wrapped net.Conn's kind

When passing a wrapped connection to ipv{4,6}.NewPacketConn, calls to
ReadBatch will fail with an invalid connection error. This is because
NewConn performs a type assertion to determine the type (TCP, UDP, IP)
of the net.Conn.
In order to allow for wrapped connections to be passed to NewConn, we
can use an interface assertion that checks for methods on the net.Conn
that are unique to TCP, UDP and IP.

Fixes golang/go#42444.

Change-Id: I07cdb037829643f5cf4cd77105a772fcff8c4b2a
Reviewed-on: https://go-review.googlesource.com/c/net/+/271927
Reviewed-by: Emmanuel Odeke <emmanuel@orijtech.com>
Reviewed-by: Ian Lance Taylor <iant@golang.org>
Run-TryBot: Emmanuel Odeke <emmanuel@orijtech.com>
TryBot-Result: Go Bot <gobot@golang.org>
Trust: Daniel Martí <mvdan@mvdan.cc>
2 files changed
tree: fa702c3b2244679b57629b620cc774198ec32efe
  1. bpf/
  2. context/
  3. dict/
  4. dns/
  5. html/
  6. http/
  7. http2/
  8. icmp/
  9. idna/
  10. internal/
  11. ipv4/
  12. ipv6/
  13. lif/
  14. nettest/
  15. netutil/
  16. proxy/
  17. publicsuffix/
  18. route/
  19. trace/
  20. webdav/
  21. websocket/
  22. xsrftoken/
  23. .gitattributes
  24. .gitignore
  25. AUTHORS
  26. codereview.cfg
  27. CONTRIBUTING.md
  28. CONTRIBUTORS
  29. go.mod
  30. go.sum
  31. LICENSE
  32. PATENTS
  33. README.md
README.md

Go Networking

Go Reference

This repository holds supplementary Go networking libraries.

Download/Install

The easiest way to install is to run go get -u golang.org/x/net. You can also manually git clone the repository to $GOPATH/src/golang.org/x/net.

Report Issues / Send Patches

This repository uses Gerrit for code changes. To learn how to submit changes to this repository, see https://golang.org/doc/contribute.html. The main issue tracker for the net repository is located at https://github.com/golang/go/issues. Prefix your issue with “x/net:” in the subject line, so it is easy to find.