From fd7ec1a90bba26ec1ab08d5ce295bbccb23e0884 Mon Sep 17 00:00:00 2001 From: bel Date: Sat, 15 Apr 2023 15:01:43 -0600 Subject: [PATCH] tls on a socks5 does NOT work out of the box --- internal/proxy/proxy.go | 19 +++++++++++++++---- 1 file changed, 15 insertions(+), 4 deletions(-) diff --git a/internal/proxy/proxy.go b/internal/proxy/proxy.go index 6dfbf9e..cf91210 100644 --- a/internal/proxy/proxy.go +++ b/internal/proxy/proxy.go @@ -111,11 +111,22 @@ func (p Proxy) ServeTLS(ln net.Listener, certFile, keyFile string) { ln = tls.NewListener(ln, cfg) defer ln.Close() - for { - if err := acceptAndHandle(ln, httpproxy.Handler(d), d); err != nil { - panic(err) + socksListener, httpListener := proxymux.SplitSOCKSAndHTTP(ln) + errc := make(chan error, 2) + go func() { + for { + if err := acceptAndHandle(httpListener, httpproxy.Handler(d), d); err != nil { + errc <- err + } } - } + }() + go func() { + socksProxy := &socks5.Server{Dialer: d} + if err := socksProxy.Serve(socksListener); err != nil { + errc <- err + } + }() + <-errc } type singleListener struct {