diff --git a/internal/client/client.go b/internal/client/client.go index 2e2d017..998b9bb 100644 --- a/internal/client/client.go +++ b/internal/client/client.go @@ -218,10 +218,11 @@ func (c *Client) handleSOCKS5(conn net.Conn) { defer timeout.Stop() go func() { - for i := 0; i < 100; i++ { + for i := 0; i < 200; i++ { time.Sleep(50 * time.Millisecond) - data := c.mux.ReadStream(sid) - if len(data) > 0 { + + stream := c.mux.GetStream(sid) + if stream != nil && len(stream.RecvBuf()) > 0 { connected <- true return } diff --git a/internal/mux/mux.go b/internal/mux/mux.go index 9963567..9149cb1 100644 --- a/internal/mux/mux.go +++ b/internal/mux/mux.go @@ -17,6 +17,12 @@ type Stream struct { mu sync.Mutex } +func (s *Stream) RecvBuf() []byte { + s.mu.Lock() + defer s.mu.Unlock() + return s.recvBuf +} + type Multiplexer struct { streams map[uint16]*Stream nextID uint16