diff --git a/common/singbridge/packet.go b/common/singbridge/packet.go index f49fe3ca..42ef966e 100644 --- a/common/singbridge/packet.go +++ b/common/singbridge/packet.go @@ -60,6 +60,8 @@ 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) @@ -83,6 +85,8 @@ func (w *PacketConnWrapper) WritePacket(buffer *B.Buffer, destination M.Socksadd w.T.Update() endpoint, err := ToDestination(destination, net.Network_UDP) if err != nil { + // uplinkonly + w.T.SetTimeout(3 * time.Second) return err } vBuf := buf.New() diff --git a/common/singbridge/pipe.go b/common/singbridge/pipe.go index 0b0b9f77..5bb4b8d1 100644 --- a/common/singbridge/pipe.go +++ b/common/singbridge/pipe.go @@ -45,7 +45,12 @@ func (w *PipeConnWrapper) Close() error { func (w *PipeConnWrapper) Read(b []byte) (n int, err error) { w.T.Update() - return w.R.Read(b) + n, err = w.Read(b) + if err != nil { + // uplinkonly + w.T.SetTimeout(3 * time.Second) + } + return } func (w *PipeConnWrapper) Write(p []byte) (n int, err error) { @@ -68,6 +73,8 @@ func (w *PipeConnWrapper) Write(p []byte) (n int, err error) { if err != nil { n = 0 buf.ReleaseMulti(mb) + // downlinkonly + w.T.SetTimeout(3 * time.Second) } return }