netns: fix network namespaces for listeners

This commit is contained in:
ginuerzh
2024-07-08 10:59:32 +08:00
parent 949c98adc0
commit 96f4d7bf5c
9 changed files with 246 additions and 74 deletions

View File

@ -10,29 +10,47 @@ import (
"time"
xnet "github.com/go-gost/x/internal/net"
"github.com/miekg/dns"
)
type Server interface {
ListenAndServe() error
Serve() error
Shutdown() error
}
type dnsServer struct {
server *dns.Server
}
func (s *dnsServer) Serve() error {
return s.server.ActivateAndServe()
}
func (s *dnsServer) Shutdown() error {
return s.server.Shutdown()
}
type dohServer struct {
addr string
tlsConfig *tls.Config
listener net.Listener
server *http.Server
}
func (s *dohServer) ListenAndServe() error {
network := "tcp"
if xnet.IsIPv4(s.addr) {
network = "tcp4"
func (s *dohServer) Serve() error {
var err error
ln := s.listener
if ln == nil {
network := "tcp"
if xnet.IsIPv4(s.addr) {
network = "tcp4"
}
ln, err = net.Listen(network, s.addr)
if err != nil {
return err
}
ln = tls.NewListener(ln, s.tlsConfig)
}
ln, err := net.Listen(network, s.addr)
if err != nil {
return err
}
ln = tls.NewListener(ln, s.tlsConfig)
return s.server.Serve(ln)
}