diff --git a/common/singbridge/packet.go b/common/singbridge/packet.go index 24f0a5f8..fde4bed3 100644 --- a/common/singbridge/packet.go +++ b/common/singbridge/packet.go @@ -40,8 +40,14 @@ type PacketConnWrapper struct { T *signal.ActivityTimer } -func (w *PacketConnWrapper) ReadPacket(buffer *B.Buffer) (M.Socksaddr, error) { +func (w *PacketConnWrapper) ReadPacket(buffer *B.Buffer) (addr M.Socksaddr, err error) { w.T.Update() + defer func() { + if err != nil { + // uplinkonly + w.T.SetTimeout(2 * time.Second) + } + }() if w.cached != nil { mb, bb := buf.SplitFirst(w.cached) if bb == nil { @@ -60,11 +66,6 @@ func (w *PacketConnWrapper) ReadPacket(buffer *B.Buffer) (M.Socksaddr, error) { } } mb, err := w.ReadMultiBuffer() - if err != nil { - // uplinkonly - w.T.SetTimeout(3 * time.Second) - return M.Socksaddr{}, err - } nb, bb := buf.SplitFirst(mb) if bb == nil { return M.Socksaddr{}, nil @@ -82,18 +83,22 @@ func (w *PacketConnWrapper) ReadPacket(buffer *B.Buffer) (M.Socksaddr, error) { } } -func (w *PacketConnWrapper) WritePacket(buffer *B.Buffer, destination M.Socksaddr) error { +func (w *PacketConnWrapper) WritePacket(buffer *B.Buffer, destination M.Socksaddr) (err error) { w.T.Update() + defer func() { + if err != nil { + // downlinkonly + w.T.SetTimeout(5 * time.Second) + } + }() endpoint, err := ToDestination(destination, net.Network_UDP) if err != nil { - // uplinkonly - w.T.SetTimeout(3 * time.Second) return err } vBuf := buf.New() vBuf.Write(buffer.Bytes()) vBuf.UDP = &endpoint - return w.Writer.WriteMultiBuffer(buf.MultiBuffer{vBuf}) + return w.WriteMultiBuffer(buf.MultiBuffer{vBuf}) } func (w *PacketConnWrapper) Close() error { diff --git a/common/singbridge/pipe.go b/common/singbridge/pipe.go index 21b39222..94c5ee0c 100644 --- a/common/singbridge/pipe.go +++ b/common/singbridge/pipe.go @@ -49,7 +49,7 @@ func (w *PipeConnWrapper) Read(b []byte) (n int, err error) { n, err = w.R.Read(b) if err != nil { // uplinkonly - w.T.SetTimeout(3 * time.Second) + w.T.SetTimeout(2 * time.Second) } return } @@ -75,7 +75,7 @@ func (w *PipeConnWrapper) Write(p []byte) (n int, err error) { n = 0 buf.ReleaseMulti(mb) // downlinkonly - w.T.SetTimeout(3 * time.Second) + w.T.SetTimeout(5 * time.Second) } return }