修复客户端断联未释放端口问题
This commit is contained in:
@@ -9,6 +9,7 @@ import (
|
||||
"proxy-server/server/fwd/http"
|
||||
"proxy-server/server/fwd/socks"
|
||||
"strconv"
|
||||
"strings"
|
||||
"time"
|
||||
|
||||
"github.com/pkg/errors"
|
||||
@@ -54,36 +55,43 @@ func (s *Server) Run() error {
|
||||
m.SetReadTimeout(5 * time.Second)
|
||||
defer m.Close()
|
||||
|
||||
go func() {
|
||||
<-s.ctx.Done()
|
||||
close(s.Conn)
|
||||
m.Close()
|
||||
}()
|
||||
|
||||
socksLs := m.Match(cmux.PrefixMatcher(string([]byte{0x05})))
|
||||
defer utils.Close(socksLs)
|
||||
go func() {
|
||||
err = s.acceptSocks(socksLs)
|
||||
if err != nil {
|
||||
slog.Error("dispatcher socks accept error", "err", err)
|
||||
if strings.Contains(err.Error(), "mux: server closed") {
|
||||
return
|
||||
}
|
||||
slog.Warn("dispatcher socks accept error", "err", err)
|
||||
}
|
||||
}()
|
||||
|
||||
httpLs := m.Match(cmux.HTTP1Fast("PATCH"))
|
||||
defer utils.Close(httpLs)
|
||||
go func() {
|
||||
err = s.acceptHttp(httpLs)
|
||||
if err != nil {
|
||||
slog.Error("dispatcher http accept error", "err", err)
|
||||
if strings.Contains(err.Error(), "mux: server closed") {
|
||||
return
|
||||
}
|
||||
slog.Warn("dispatcher http accept error", "err", err)
|
||||
}
|
||||
}()
|
||||
|
||||
err = m.Serve()
|
||||
if err != nil {
|
||||
return errors.Wrap(err, "dispatcher serve error")
|
||||
}
|
||||
errCh := make(chan error)
|
||||
go func() {
|
||||
err = m.Serve()
|
||||
if err != nil {
|
||||
err = errors.Wrap(err, "dispatcher serve error")
|
||||
}
|
||||
errCh <- err
|
||||
}()
|
||||
|
||||
return nil
|
||||
select {
|
||||
case <-s.ctx.Done():
|
||||
return nil
|
||||
case err := <-errCh:
|
||||
return err
|
||||
}
|
||||
}
|
||||
|
||||
func (s *Server) acceptHttp(ls net.Listener) error {
|
||||
|
||||
Reference in New Issue
Block a user