naive_quic.go 657 B

123456789101112131415161718192021222324252627282930313233343536
  1. //go:build with_quic
  2. package inbound
  3. import (
  4. "github.com/sagernet/quic-go/http3"
  5. E "github.com/sagernet/sing/common/exceptions"
  6. )
  7. func (n *Naive) configureHTTP3Listener() error {
  8. tlsConfig, err := n.tlsConfig.Config()
  9. if err != nil {
  10. return err
  11. }
  12. h3Server := &http3.Server{
  13. Port: int(n.listenOptions.ListenPort),
  14. TLSConfig: tlsConfig,
  15. Handler: n,
  16. }
  17. udpConn, err := n.ListenUDP()
  18. if err != nil {
  19. return err
  20. }
  21. go func() {
  22. sErr := h3Server.Serve(udpConn)
  23. udpConn.Close()
  24. if sErr != nil && !E.IsClosedOrCanceled(sErr) {
  25. n.logger.Error("http3 server serve error: ", sErr)
  26. }
  27. }()
  28. n.h3Server = h3Server
  29. return nil
  30. }