xtaci / smux

A Stream Multiplexing Library for golang with least memory usage(TDMA)
MIT License
1.31k stars 196 forks source link

EOF 问题 #50

Closed z2n closed 5 years ago

z2n commented 5 years ago

你好, 我遇到一个问题, Stream.Read 返回的 EOFerrors.WithStack 包装后 的, 导致和其他一些库使用时得到错误的判断, 如: reverseproxy.go 是设计有误, 还是我用的方法错了?

xtaci commented 5 years ago

你可以用 err.Cause()获得topmost error https://godoc.org/github.com/pkg/errors#Cause

z2n commented 5 years ago

可是和其他接口合作时它们接收到一个非 EOF 错误, 就会做一些其他处理(比如 error 日志输出, 提前返回等).

如上面的 net/http/httputil/reverseproxy 在遇到非 EOF 错误时就会输出 error 日志, 继而 panic 根本没有机会获取 err.Cause().

xtaci commented 5 years ago

你可以wrap一下,接口桥接, 但reverseproxy直接判定io.EOF,可以说是相当大胆的写法。