mirror of
https://github.com/e1732a364fed/v2ray_simple.git
synced 2026-04-23 04:37:04 +08:00
a704f77eb4
Readver是因为可以暴露出底层连接所以能加速;而BuffersReader是 因为协议对于多buf的读取支持良好所以可以加速,逻辑完全不同
39 lines
892 B
Go
39 lines
892 B
Go
package netLayer
|
|
|
|
import (
|
|
"net"
|
|
"syscall"
|
|
|
|
"github.com/e1732a364fed/v2ray_simple/utils"
|
|
)
|
|
|
|
//经过测试,网速越快、延迟越小,越不需要readv, 此时首包buf越大越好, 因为一次系统底层读取就会读到一大块数据, 此时再用readv分散写入 实际上就是反效果; readv的数量则不需要太多
|
|
|
|
//在内网单机自己连自己测速时,readv会导致降速.
|
|
|
|
const (
|
|
DefaultReadvOption = true
|
|
)
|
|
|
|
var (
|
|
|
|
// 是否会在转发过程中使用readv
|
|
UseReadv bool
|
|
)
|
|
|
|
// if r!=0, then it means c can be used in readv. -1 means syscall.RawConn,1 means utils.BuffersReader, 2 means utils.Readver
|
|
func IsConnGoodForReadv(c net.Conn) (r int, rawReadConn syscall.RawConn) {
|
|
rawReadConn = GetRawConn(c)
|
|
|
|
if rawReadConn != nil {
|
|
r = -1
|
|
return
|
|
|
|
} else if mr, ok := c.(utils.MultiReader); ok {
|
|
r = mr.WillReadBuffersBenifit()
|
|
return
|
|
|
|
}
|
|
return
|
|
}
|