mirror of
https://github.com/SagerNet/sing-mux.git
synced 2025-04-01 19:17:36 +03:00
37 lines
516 B
Go
37 lines
516 B
Go
package mux
|
|
|
|
import (
|
|
"io"
|
|
"net"
|
|
|
|
"github.com/hashicorp/yamux"
|
|
)
|
|
|
|
type wrapStream struct {
|
|
net.Conn
|
|
}
|
|
|
|
func (w *wrapStream) Read(p []byte) (n int, err error) {
|
|
n, err = w.Conn.Read(p)
|
|
err = wrapError(err)
|
|
return
|
|
}
|
|
|
|
func (w *wrapStream) Write(p []byte) (n int, err error) {
|
|
n, err = w.Conn.Write(p)
|
|
err = wrapError(err)
|
|
return
|
|
}
|
|
|
|
func (w *wrapStream) Upstream() any {
|
|
return w.Conn
|
|
}
|
|
|
|
func wrapError(err error) error {
|
|
switch err {
|
|
case yamux.ErrStreamClosed:
|
|
return io.EOF
|
|
default:
|
|
return err
|
|
}
|
|
}
|