github.com/sagernet/sing-box@v1.2.7/inbound/naive_quic.go (about)

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