quic: make Endpoint.Close return only when the endpoint is actually closed

When the context passed to Endpoint.Close has been canceled, it will
correctly abort any active connections immediately, without waiting for
peer acknowledgement. However, in doing so, Endpoint.Close will
immediately return without waiting for its listen loop to actually exit.
As a result, callers such as our HTTP/3 implementation cannot know
whether the endpoint is actually completely closed or not, and the
endpoint might be detected as a goroutine leak in tests.

For golang/go#70914
For golang/go#78701

Change-Id: Idd67ae200305001be336da50f1794c716a6a6964
Reviewed-on: https://go-review.googlesource.com/c/net/+/822984
Reviewed-by: Nicholas Husin <husin@google.com>
Reviewed-by: Damien Neil <dneil@google.com>
LUCI-TryBot-Result: golang-scoped@luci-project-accounts.iam.gserviceaccount.com <golang-scoped@luci-project-accounts.iam.gserviceaccount.com>
3 files changed
tree: 22276d6a0a6aec1297768cb085fb0bace2eaffd0
  1. bpf/
  2. context/
  3. dict/
  4. dns/
  5. html/
  6. http/
  7. http2/
  8. http3/
  9. icmp/
  10. idna/
  11. internal/
  12. ipv4/
  13. ipv6/
  14. lif/
  15. nettest/
  16. netutil/
  17. proxy/
  18. publicsuffix/
  19. quic/
  20. route/
  21. trace/
  22. webdav/
  23. websocket/
  24. xsrftoken/
  25. .gitattributes
  26. .gitignore
  27. codereview.cfg
  28. CONTRIBUTING.md
  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 packages.

Report Issues / Send Patches

This repository uses Gerrit for code changes. To learn how to submit changes to this repository, see https://go.dev/doc/contribute.

The git repository is https://go.googlesource.com/net.

The main issue tracker for the net repository is located at https://go.dev/issues. Prefix your issue with “x/net:” in the subject line, so it is easy to find.