
大家有AI一顿搞,根本没解决问题,果然AI不是万能的
最后我试了一下socks5是没问题的,问题只可能出在获取src地址的调用上了 把这段代码 让qwen3-coder看了下
https://github.com/fqdeng/x-proxy/blob/master/pkg/proxy/transparent_linux.go
fd := file.Fd() 这个会对文件描述符进行复制,复制后 Conn的行为会异常,导致Conn无法关闭,最终协程无法退出
潜在影响:会严重影响 Conn 关闭! 问题所在: tcpConn.File() 会复制文件描述符 这个操作会将 TCP 连接的文件描述符复制给一个新的 *os.File 但原始的 net.Conn 仍然持有该连接 file.Close() 只关闭复制的文件描述符 当你调用 file.Close() 时,只是关闭了复制的 fd 原始的 net.Conn 仍然可以正常使用 但是!这会破坏连接的状态 在某些系统上,复制 fd 后再关闭它,可能会影响原始连接的行为 特别是在透明代理场景下,可能影响后续的数据传输
1 suruiran 131 天前 读的时候加个 buf 。定时的读一个字节,然后放到 buf 里面,用来检测连接。然后业务读都从 buf 里取,还要加个锁或者 chan 来实现同步。 |
2 676529483 131 天前 加个心跳吧 |
4 sk217 OP 问题大概率出在这里,看有没有办法 加入心跳连接之类的功能 https://github.com/fqdeng/x-proxy/blob/master/pkg/proxy/io.go |
6 mainjzb 131 天前 io.go 文件 copyWithTimeout 再写一个 copyTCPWithTimeout ,110 行 Read 失败后,调用 dst.CloseWrite() [dst 需要改成 net.TCPConn |
8 mrjnamei 131 天前 |
10 zhouyin 131 天前 以外包 fix bug 类项目 50 人民币怎么够 50 只够解决很小的 css html 这种难度起码 400 美元 |
11 ZGeek 131 天前 看样子想做一个 windows 下的隧道,但是这样的东西其实已经很多了,为什么要自己开发呢? |
13 ChunkitAu 131 天前 猜测: 卡在了`read`函数,设置了`SetReadDeadline`导致下一次循环还没开始,无法从`<-ctx.Done()` 退出 感觉可以在起一个协程来来单独控制连接的关闭 ``` go func() { <-ctx.Done() src.Close() dst.Close() }() ``` |
14 suruiran 130 天前 怎么仓库都没了,我上午都没进去看呢…… |