Conversation
|
首先这个叫 connected socket 不叫什么 tcp after conn |
|
你实在要加这个brutal的话有一个办法 丢tcp mask里 反正里面看到的是conn可以正常call这个调用 |
我不是很在乎叫什么,所以说可以随时 break
[listen 上设置不会自动继承 只对“已连接的 TCP socket" 服务端 accept() 后] 这类随便搜下都能出来,只是不常用?
但这并不是 mask,更合适的 CustomSockopt 反而被你关了,而且 mask 并不保证拿到 fd,只是保证在 tls 之前,在监听之后,而监听的时候可能返回的是 proxyproto |
|
至于只是加个 bool tcpAfterConn 要改动这么多那我也没办法,分了五个文件 darwin freebsd linux windows other,每个都有自己的 applyInboundSocketOptions applyOutboundSocketOptions,不像你从 sing 搬过来的那个 brutal 只分 linux 和 !linux 顺便这个 pr 其实修复了 windows 无法 CustomSockoptString 的问题, |
内核设计者不傻 其他大多数只对 connected 生效的 sockopt 大多数都是用于获得 peer 信息或者根据某条连接的具体需要实时对 socket 进行部分调整 真需要对一个 listening 都生效的参数他们会允许放到 listening socket 上然后继承 实际上 brutal 也属此列 估计是故意这么设计的 放开这个限制只用在模块代码改几行而已 如果是故意的这么做有点滥用 API 的感觉 通过一个 dirty 的 hook 来解决一个为了规范行为做出的限制
有个 UnwrapRawConn 工具函数
单纯只是因为 Windows 没有这个调用而已 而且也没有有意义的选项 我重新看了一下它还被后面的二进制选项用来传递字节数据 这个单开一个 type 就行了 当初设计 customSockopt 的时候就想过了 要一个hex或者base64过的字节输入就行了 一直没有做是因为到开 custom 之前那一连串的预制 sockopt 核心都没有用过需要传递原始字节的 sockopt 那时候的结果是等真有需要了再说 |
|
随便找了几个 listen 阶段无意义只对 ESTABLISHED 状态有意义 TCP_CORK TCP_QUICKACK TCP_USER_TIMEOUT
首先我没说过内核设计者傻,其次即使开放了 modprobe 的参数设置要修改也不如 core 中灵活,更何况不就是没开放才需要在 core 中设置 你看到的是我为 brutal 包了一顿饺子,我看到的是 customSockopt 并不够 custom,做一个能在 accepted 之后的设置才是真正的 custom,如果其他魔改的 bbr 也通过 inet_csk_ca 这类方式设置参数,core 里并没有办法能够设置 说回这个 pr,我又没有权限,甚至都等不到我回复直接 close 了,我看不到对 contributor 的基本尊重,即使有权限我也不会直接提交,更何况你说的 |
TCP_CORK 和 TCP_USER_TIMEOUT 都是可以继承的 后者设置都已经写在 Xray 里了 而 TCP_QUICKACK 是个会被动态调整的状态
开放了就可以用现有的 infra 设置了 顶多加一个raw byte支持 很简单
必要性在上面已经说明了
太 dirty 而且没刚需的东西我就直接关了 5727 我就没动 因为它相对没那么 dirty 尊不尊重我不是扫了一眼觉得这功能烂就直接关了 我要花很多时间去翻代码查资料去检查有没有必要的 比如很多参数能不能继承没个文档的 TCP_USER_TIMEOUT 是明显标了 TCP_CORK 是我去翻了内核 Linux代码 我甚至觉得话说太死后面又补了一句 tcp mask 是个可选的低侵入方便配置的实现 |
此 pr 为 #5727 替代方案,且不影响后续添加通过 mux 协商速率的版本
tcpAfterConn 为 true 则该 custom socket 只在入站的 tcp 连接确认后进行设置
下面的示例等同于 5727 的无协商设置 brutal rate 150mbps cwnd 15,可选 xhttp 传输层启用 mux
使用 customSockopt 应该清楚自己在做什么,至于命名可以先不入文档,可以随时 break