diff --git a/src/internal/server/redirect/redirect_linux.go b/src/internal/server/redirect/redirect_linux.go index 7614eb3..2695591 100644 --- a/src/internal/server/redirect/redirect_linux.go +++ b/src/internal/server/redirect/redirect_linux.go @@ -3,8 +3,11 @@ package redirect import ( + "errors" "fmt" "net" + "syscall" + "time" "github.com/sirupsen/logrus" "github.com/sunbk201/ua3f/internal/config" @@ -37,7 +40,10 @@ func (s *Server) Start() (err error) { var client net.Conn for { if client, err = s.listener.Accept(); err != nil { - logrus.Error("s.listener.Accept: ", err) + if errors.Is(err, syscall.EMFILE) { + time.Sleep(time.Second) + } + logrus.Error("s.listener.Accept:", err) continue } logrus.Debugf("Accept connection from %s", client.RemoteAddr().String()) diff --git a/src/internal/server/socks5/socks5.go b/src/internal/server/socks5/socks5.go index 6371fdb..4556198 100644 --- a/src/internal/server/socks5/socks5.go +++ b/src/internal/server/socks5/socks5.go @@ -7,6 +7,7 @@ import ( "io" "net" "strings" + "syscall" "time" "github.com/sirupsen/logrus" @@ -60,7 +61,10 @@ func (s *Server) Start() (err error) { var client net.Conn for { if client, err = s.listener.Accept(); err != nil { - logrus.Errorf("s.listener.Accept: %s", err.Error()) + if errors.Is(err, syscall.EMFILE) { + time.Sleep(time.Second) + } + logrus.Error("s.listener.Accept:", err) continue } logrus.Debugf("Accept connection from %s", client.RemoteAddr().String()) diff --git a/src/internal/server/tproxy/tproxy_linux.go b/src/internal/server/tproxy/tproxy_linux.go index 7268634..d9dc883 100644 --- a/src/internal/server/tproxy/tproxy_linux.go +++ b/src/internal/server/tproxy/tproxy_linux.go @@ -4,9 +4,11 @@ package tproxy import ( "context" + "errors" "fmt" "net" "syscall" + "time" "golang.org/x/sys/unix" @@ -58,7 +60,10 @@ func (s *Server) Start() error { var client net.Conn for { if client, err = s.listener.Accept(); err != nil { - logrus.Errorf("s.listener.Accept: %s", err.Error()) + if errors.Is(err, syscall.EMFILE) { + time.Sleep(time.Second) + } + logrus.Error("s.listener.Accept:", err) continue } logrus.Debugf("Accept connection from %s", client.RemoteAddr().String())