naive_quic.go 834 B

12345678910111213141516171819202122232425262728293031323334353637383940
  1. //go:build with_quic
  2. package inbound
  3. import (
  4. "net"
  5. "net/netip"
  6. M "github.com/sagernet/sing/common/metadata"
  7. "github.com/lucas-clemente/quic-go"
  8. "github.com/lucas-clemente/quic-go/http3"
  9. )
  10. func (n *Naive) configureHTTP3Listener(listenAddr string) error {
  11. h3Server := &http3.Server{
  12. Port: int(n.listenOptions.ListenPort),
  13. TLSConfig: n.tlsConfig.Config(),
  14. Handler: n,
  15. }
  16. udpListener, err := net.ListenPacket(M.NetworkFromNetAddr("udp", netip.Addr(n.listenOptions.Listen)), listenAddr)
  17. if err != nil {
  18. return err
  19. }
  20. n.logger.Info("udp server started at ", udpListener.LocalAddr())
  21. go func() {
  22. sErr := h3Server.Serve(udpListener)
  23. if sErr == quic.ErrServerClosed {
  24. return
  25. } else if sErr != nil {
  26. n.logger.Error("http3 server serve error: ", sErr)
  27. }
  28. }()
  29. n.h3Server = h3Server
  30. return nil
  31. }